# Project Showcases Fezcodex supports different project detail page styles to best present each project. Currently, there are two distinct styles available: "Stylish" and "Techno". ## 1. Activation To assign a style to a project, set the `(style)` field in `public/projects/projects.piml`: ```piml > (project) (slug) my-cool-project (style) stylish ; or 'techno' ... ``` If no style is specified, the default layout will be used. --- ## 2. Stylish Layout This layout is designed for high-production, landing-page style showcases. It features a rich, component-driven design ideal for web apps and major projects. ### Directory Structure Content resides in `public/projects/[slug]/` as `.txt` files (previously `.mdx`). ```text public/projects/my-project/ ├── hero.txt # Hero section ├── partners.txt # Tech stack/Partners ├── terminal.txt # Interactive terminal tabs ├── integrations.txt # Feature showcase grid ├── features.txt # Icon cards grid ├── technical.txt # Technical specs ├── details.txt # Long-form content └── cta.txt # Call to action ``` ### File Specifications (Same block parsing rules as before apply, e.g., `:::feature`, `:::tech`) --- ## 3. Editorial Layout The **Editorial** style (formerly Techno) is a raw, brutalist, developer-focused aesthetic. It uses monospaced fonts, high-contrast dark modes, and terminal-inspired elements. It is perfect for CLIs, system tools, and low-level libraries. ### Directory Structure Content resides in `public/projects/[slug]/` as `.txt` files. ```text public/projects/my-cli-tool/ ├── hero.txt # Hero title and description ├── features.txt # (Not currently used in Editorial layout, but reserved) ├── terminal.txt # Terminal session preview (supports colors) ├── install.txt # Installation command(s) ├── social.txt # Horizontal scrollable "social proof" or "explore" cards ├── description.txt # Main project description (Overview, Features) └── footer.txt # (Reserved for footer links) ``` ### File Specifications #### `hero.txt` * **Lines starting with `#`**: Title lines (rendered in large serif font). * **image:** tag: (Ignored in Editorial layout as it uses a global background grid, but good to keep for metadata). * **Body**: Description text below the title. ```txt # Engineered # For The Shell Dush is the custom terminal shell... ``` #### `terminal.txt` Raw text that is rendered inside a terminal window component. * Supports standard Markdown code blocks. * Use `rehype-raw` compatible HTML spans for colors if needed (e.g., `warn`). ```txt ~ dush dush> echo "hello" ``` #### `install.txt` Contains the raw installation command string. ```txt go install github.com/fezcode/dush@latest ``` #### `social.txt` Defines the "Explore With Us" cards. Entries are separated by `---`. * **Line 1**: Title (optionally starts with `#`). * **Line 2**: Author / Subtitle. * **Line 3**: Stats string (e.g., `+10 -2 ~1`). * **link:**: URL for the card. * **image:**: (Optional) Background image URL. ```txt # Why I built Dush fezcode +10 -2 ~1 link: https://github.com/fezcode/dush --- # Architecture ... ``` #### `description.txt` The main content area ("About the Project"). * Standard Markdown. * Supports lists, bolding, and headers. * `## Headings` separate the content into different grid rows in the layout. ```txt ## Overview Dush is a minimalist shell... ## Key Features - Feature 1 - Feature 2 ``` ## 4. Hi-Fi Layout The **Hi-Fi** style (`(style) hifi`) turns the project page into a working music player. It was built for **Timp** but is fully data-driven and reusable for any audio/media project. Warm near-black ink, cream type (Unbounded display, Hanken Grotesk body, Spline Sans Mono labels), and — the signature — a transport that "plays" a queue of color palettes: every record re-samples the whole page's accent colors, exactly like Timp samples its accent from album art. Sections mirror the app's own panels: **Now Playing** (hero player + record rack), **The Queue** (features as tracks, keyed with real hotkeys), **Lyrics** (manifesto with scroll-synced karaoke highlight), **Equalizer** (source modules as faders, heights = real file sizes), **Screens**, and **Liner Notes** (stats, build snippet, credits). A mini-player bar docks to the bottom once the hero scrolls away. ### Directory Structure All content lives in a single JSON config: ```text public/projects/my-player/ └── hifi.txt # One JSON config for the whole page ``` ### `hifi.txt` keys * `wordmark`, `tagline`, `artist`, `version`, `repo`, `download`, `formats` * `trackSeconds`: how long each palette "track" plays (default 24) * `queue[]`: `{ title, desc, keys[], palette: { name, a, b } }` — one entry per feature; `a`/`b` are the two gradient stops sampled into `--acc`/`--acc2` * `lyrics`: `{ caption, lines[] }` * `eq`: `{ heading, note, bands[]: { file, kb, level (0..1), role } }` * `screens[]`: `{ src, caption }` * `stats[]`: `{ value, label }` * `build`: `{ caption, lines[] }` (rendered with a copy button) * `liner[]`: paragraphs, `credits[]`: `{ name, role, href }`, `license` ## 5. Assets * **Images**: Place images in `public/images/projects/` or `public/images/bg/`. * **Icons**: Use Phosphor icons where applicable in code, or SVG assets. ## 6. Adding a New Project Checklist 1. Create the folder `public/projects/[your-slug]`. 2. Choose your style: `stylish`, `editorial`, `hifi`, etc. 3. Create the corresponding `.txt` files based on the chosen style's structure. 4. Add the project to `public/projects/projects.piml` with the correct `(style)` field. 5. Run `npm run lint` to ensure code quality.