π§ Emoji + Metadata + Tree Layout
Here's a complete Python script that generates a visually appealing tree structure of your project folder using emoji icons and file metadata. The output is formatted as a Bash-style code block perfect for embedding in Docusaurus.
Full Expressive Python Scriptβ
https://copilot.microsoft.com/shares/B7pvjR59PwjbFEnyQNiEJ
generate_tree_md.py
import os
import datetime
# π§ Feature toggles
INCLUDE_EMOJI = True
INCLUDE_METADATA = False
INCLUDE_COMMENTS = True
SMART_FOLDER_LABELS = False
# ποΈ Manual file comments (extend as needed)
MANUAL_COMMENTS = {
"WebBrowser.js": "Main browser component",
"WebBrowser.module.css": "Browser styles",
"BrowserExamples.js": "Example components (optional)",
"README.md": "Project overview",
"config.json": "Configuration settings"
}
# π Emoji mapping by file extension
def emoji_for_file(file_name):
ext = os.path.splitext(file_name)[1].lower()
return {
'.js': 'π',
'.ts': 'π',
'.css': 'π¨',
'.scss': 'π§΅',
'.html': 'π',
'.py': 'π',
'.md': 'π',
'.json': 'π§',
'.jpg': 'πΌοΈ',
'.png': 'πΌοΈ',
'.txt': 'π',
'.test.js': 'π§ͺ',
'.lock': 'π',
}.get(ext, 'π')
# π Emoji by folder purpose
def emoji_for_folder(folder_name):
mapping = {
'test': 'π§ͺ',
'tests': 'π§ͺ',
'components': 'π§©',
'config': 'βοΈ',
'public': 'π',
'docs': 'π',
'scripts': 'π',
'assets': 'π¨',
'utils': 'π§°',
}
for key, icon in mapping.items():
if key.lower() in folder_name.lower():
return icon
return 'π'
# π Generate metadata comment
def get_file_metadata_comment(file_path):
stats = os.stat(file_path)
size_kb = stats.st_size / 1024
mtime = datetime.datetime.fromtimestamp(stats.st_mtime)
ext = os.path.splitext(file_path)[1].lower().lstrip('.').upper() or "Unknown"
return f"{ext} file, {size_kb:.1f} KB, modified {mtime.strftime('%Y-%m-%d %H:%M')}"
# π³ Recursive folder walker
def map_folder_structure(root_path, indent=""):
lines = []
items = sorted(os.listdir(root_path))
for idx, item in enumerate(items):
item_path = os.path.join(root_path, item)
is_last = idx == len(items) - 1
prefix = "βββ " if is_last else "βββ "
line_prefix = indent + prefix
# Folder line
if os.path.isdir(item_path):
folder_emoji = emoji_for_folder(item) if SMART_FOLDER_LABELS and INCLUDE_EMOJI else ('π' if INCLUDE_EMOJI else '')
spacing = ' ' if INCLUDE_EMOJI else ''
line = f"{line_prefix}{folder_emoji}{spacing}{item}/"
lines.append(line)
new_indent = indent + (" " if is_last else "β ")
lines.extend(map_folder_structure(item_path, new_indent))
# File line
else:
file_emoji = emoji_for_file(item) if INCLUDE_EMOJI else ''
spacing = ' ' if INCLUDE_EMOJI else ''
comments = []
if INCLUDE_COMMENTS and item in MANUAL_COMMENTS:
comments.append(MANUAL_COMMENTS[item])
if INCLUDE_METADATA:
comments.append(get_file_metadata_comment(item_path))
comment_str = f" # {' | '.join(comments)}" if comments else ''
line = f"{line_prefix}{file_emoji}{spacing}{item}{comment_str}"
lines.append(line)
return lines
# π§ͺ Wrap it all for Markdown embedding
def generate_docusaurus_bash_block(root_path):
root_name = os.path.basename(os.path.abspath(root_path))
if SMART_FOLDER_LABELS and INCLUDE_EMOJI:
top_icon = emoji_for_folder(root_name)
elif INCLUDE_EMOJI:
top_icon = 'π'
else:
top_icon = ''
spacing = ' ' if INCLUDE_EMOJI else ''
lines = [f"{top_icon}{spacing}{root_name}/"]
lines.extend(map_folder_structure(root_path))
return "```bash\n" + "\n".join(lines) + "\n```"
# βΆοΈ Example usage
output = generate_docusaurus_bash_block("src/components")
print(output)
with open("project-structure.md", "w", encoding="utf-8") as f:
f.write("## π Project Structure\n\n")
f.write(output)
π Project Structureβ
# π§ Feature toggles
INCLUDE_EMOJI = True
INCLUDE_METADATA = True
INCLUDE_COMMENTS = True
SMART_FOLDER_LABELS = True
π§© components/
βββ π BashTerminal.js # JS file, 5.3 KB, modified 2025-07-22 08:59
βββ π¨ BashTerminal.module.css # CSS file, 3.1 KB, modified 2025-07-22 08:59
βββ π BrowserExamples.js # Example components (optional) | JS file, 3.5 KB, modified 2025-07-22 08:59
βββ π BrowserWindow/
β βββ π index.js # JS file, 1.1 KB, modified 2025-07-22 08:59
β βββ π¨ styles.module.css # CSS file, 1.6 KB, modified 2025-07-22 08:59
βββ π HomepageFeatures/
β βββ π index.js # JS file, 1.7 KB, modified 2025-07-22 08:59
β βββ π¨ styles.module.css # CSS file, 0.1 KB, modified 2025-07-22 08:59
βββ π TerminalExamples.js # JS file, 1.4 KB, modified 2025-07-22 08:59
βββ π WebBrowser.js # Main browser component | JS file, 7.1 KB, modified 2025-07-22 08:59
βββ π¨ WebBrowser.module.css # Browser styles | CSS file, 7.0 KB, modified 2025-07-22 08:59
βββ π YouTubeEmbed.js # JS file, 1.1 KB, modified 2025-07-22 08:59
# π§ Feature toggles
INCLUDE_EMOJI = True
INCLUDE_METADATA = False
INCLUDE_COMMENTS = True
SMART_FOLDER_LABELS = True
π§© components/
βββ π BashTerminal.js
βββ π¨ BashTerminal.module.css
βββ π BrowserExamples.js # Example components (optional)
βββ π BrowserWindow/
β βββ π index.js
β βββ π¨ styles.module.css
βββ π HomepageFeatures/
β βββ π index.js
β βββ π¨ styles.module.css
βββ π TerminalExamples.js
βββ π WebBrowser.js # Main browser component
βββ π¨ WebBrowser.module.css # Browser styles
βββ π YouTubeEmbed.js
# π§ Feature toggles
INCLUDE_EMOJI = True
INCLUDE_METADATA = False
INCLUDE_COMMENTS = True
SMART_FOLDER_LABELS = False
π components/
βββ π BashTerminal.js
βββ π¨ BashTerminal.module.css
βββ π BrowserExamples.js # Example components (optional)
βββ π BrowserWindow/
β βββ π index.js
β βββ π¨ styles.module.css
βββ π HomepageFeatures/
β βββ π index.js
β βββ π¨ styles.module.css
βββ π TerminalExamples.js
βββ π WebBrowser.js # Main browser component
βββ π¨ WebBrowser.module.css # Browser styles
βββ π YouTubeEmbed.js
# π§ Feature toggles
INCLUDE_EMOJI = False
INCLUDE_METADATA = False
INCLUDE_COMMENTS = True
SMART_FOLDER_LABELS = False
components/
βββ BashTerminal.js
βββ BashTerminal.module.css
βββ BrowserExamples.js # Example components (optional)
βββ BrowserWindow/
β βββ index.js
β βββ styles.module.css
βββ HomepageFeatures/
β βββ index.js
β βββ styles.module.css
βββ TerminalExamples.js
βββ WebBrowser.js # Main browser component
βββ WebBrowser.module.css # Browser styles
βββ YouTubeEmbed.js