https://github.com/seanivore/design-360
Portfolio website that uses three template pages to dynamically pull projects from JSON files
https://github.com/seanivore/design-360
404-page-trick dynamic-site github-hosted html-css-javascript json-file-configuration polished portfolio-website single-page-applications static-site ui-design ux-design website-template
Last synced: 10 days ago
JSON representation
Portfolio website that uses three template pages to dynamically pull projects from JSON files
- Host: GitHub
- URL: https://github.com/seanivore/design-360
- Owner: seanivore
- Created: 2025-09-16T19:50:50.000Z (9 months ago)
- Default Branch: design-360
- Last Pushed: 2026-05-18T09:31:06.000Z (18 days ago)
- Last Synced: 2026-05-18T11:28:42.879Z (17 days ago)
- Topics: 404-page-trick, dynamic-site, github-hosted, html-css-javascript, json-file-configuration, polished, portfolio-website, single-page-applications, static-site, ui-design, ux-design, website-template
- Language: HTML
- Homepage: https://www.august.style/
- Size: 170 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# august.style
Portfolio site for Sean August Horvath. JSON-driven architecture where all content is managed through structured entry files and a configurable homepage.
**Live**: [august.style](https://august.style)
---
## Architecture
- **37 project entries** as individual JSON files (`assets/entries/uid-*.json`)
- **Tag-based filtering** across 4 groups: role, skill, product, company
- **Configurable homepage** via `assets/js/homepage-content.json` — change tags to pivot for different job targets
- **Images on CDN** at `cdn.august.style` (Cloudflare R2)
- **Pre-rendered SEO** — `generate_manifest.py` outputs `/{slug}/index.html` with baked-in meta tags for social sharing
- **Agentic entry creation** — AI agents can create new entries end-to-end using `assets/docs/ENTRY_SOP.md`
## Key Files
| File | Purpose |
| ---------------------------------- | ------------------------------------------------------ |
| `index.html` | Homepage (landing page) |
| `entry.html` | Entry page template |
| `section.html` | Universal tag/filter page |
| `generate_manifest.py` | Generates manifest + per-entry HTML with SEO meta tags |
| `assets/js/homepage-content.json` | Homepage section configuration |
| `assets/js/data-loader.js` | Data fetching, caching, filtering |
| `assets/js/landing-controller.js` | Homepage rendering |
| `assets/docs/ENTRY_SOP.md` | Entry creation standard operating procedure |
| `assets/docs/JSON_ARCHITECTURE.md` | Full technical architecture reference |
| `assets/docs/tags.json` | Tag registry |
## Local Development
```bash
python3 -m http.server 5500 --bind 127.0.0.1
```
Entry pages use `?path=` parameter locally since `/{slug}/` routing requires GitHub Pages:
```
http://localhost:5500/ # Homepage
http://localhost:5500/section.html?tags=Web+Developer # Section
http://localhost:5500/entry.html?path=saas-product-sale-features # Entry
```
## Adding a New Entry
See `assets/docs/ENTRY_SOP.md` for the full procedure. Quick reference:
1. `python3 assets/scripts/new_project.py` — generate entry file
2. Source + process images via Cloudinary
3. Upload to R2 CDN (`aws s3 sync` with `--profile r2`)
4. Fill out all JSON fields using CDN URLs
5. Move to `assets/entries/`, validate, generate manifest
## Generating Manifest + Entry HTML
```bash
python3 generate_manifest.py
```
This outputs:
- `assets/js/manifest.json` — slug-to-file mapping
- `_pages/{slug}.html` — per-entry HTML with pre-rendered SEO meta tags (Jekyll collection)