|
1 | | -# Astro Starter Kit: Minimal |
| 1 | +# GreenFlux Portfolio |
2 | 2 |
|
3 | | -```sh |
4 | | -npm create astro@latest -- --template minimal |
5 | | -``` |
| 3 | +Portfolio website for GreenFlux, LLC (Joseph Petty) built with Astro 5 and Tailwind CSS v4. |
| 4 | + |
| 5 | +**Live Site**: https://greenflux.github.io |
6 | 6 |
|
7 | | -> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun! |
| 7 | +## Technical Stack |
8 | 8 |
|
9 | | -## 🚀 Project Structure |
| 9 | +- **Framework**: Astro 5 (Static Site Generation) |
| 10 | +- **Styling**: Tailwind CSS v4 (via Vite plugin) |
| 11 | +- **Icons**: lucide-astro |
| 12 | +- **Deployment**: GitHub Pages via GitHub Actions |
| 13 | +- **View Transitions**: Enabled globally for smooth navigation |
10 | 14 |
|
11 | | -Inside of your Astro project, you'll see the following folders and files: |
| 15 | +## Project Structure |
12 | 16 |
|
13 | | -```text |
| 17 | +``` |
14 | 18 | / |
15 | 19 | ├── public/ |
| 20 | +│ ├── images/ # Static images |
| 21 | +│ ├── robots.txt # Search engine directives |
| 22 | +│ ├── sitemap.xml # Site structure for SEO |
| 23 | +│ └── favicon.svg # Site icon |
16 | 24 | ├── src/ |
17 | | -│ └── pages/ |
18 | | -│ └── index.astro |
| 25 | +│ ├── components/ # Astro components |
| 26 | +│ │ ├── Navigation.astro |
| 27 | +│ │ ├── Hero.astro |
| 28 | +│ │ ├── Portfolio.astro |
| 29 | +│ │ ├── About.astro |
| 30 | +│ │ ├── Social.astro |
| 31 | +│ │ └── Footer.astro |
| 32 | +│ ├── data/ # Content data (JSON) |
| 33 | +│ │ ├── portfolio.json # Portfolio items with metadata |
| 34 | +│ │ └── site.json # Site-wide content |
| 35 | +│ ├── layouts/ |
| 36 | +│ │ └── Layout.astro # Base layout with SEO meta tags |
| 37 | +│ ├── pages/ |
| 38 | +│ │ ├── index.astro # Main landing page |
| 39 | +│ │ └── portfolio/ # Portfolio detail pages |
| 40 | +│ └── styles/ |
| 41 | +│ └── global.css # Global styles and CSS variables |
| 42 | +├── astro.config.mjs # Astro configuration |
| 43 | +├── tailwind.config.mjs # Tailwind configuration |
| 44 | +├── CLAUDE.md # Claude Code context file |
19 | 45 | └── package.json |
20 | 46 | ``` |
21 | 47 |
|
22 | | -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. |
| 48 | +## Data-Driven Architecture |
| 49 | + |
| 50 | +All content is separated from layout and stored in JSON files: |
| 51 | + |
| 52 | +- `src/data/portfolio.json` - Portfolio project items |
| 53 | +- `src/data/site.json` - Site-wide content (about, social links, company info) |
| 54 | + |
| 55 | +To add or modify content, edit these JSON files rather than modifying components. |
| 56 | + |
| 57 | +## Development Commands |
| 58 | + |
| 59 | +```bash |
| 60 | +npm install # Install dependencies |
| 61 | +npm run dev # Start dev server (http://localhost:4321) |
| 62 | +npm run build # Build for production (outputs to dist/) |
| 63 | +npm run preview # Preview production build locally |
| 64 | +``` |
| 65 | + |
| 66 | +## Deployment |
23 | 67 |
|
24 | | -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. |
| 68 | +Automatic deployment via GitHub Actions on push to `main` branch: |
25 | 69 |
|
26 | | -Any static assets, like images, can be placed in the `public/` directory. |
| 70 | +1. Workflow runs `npm run build` |
| 71 | +2. Deploys `dist/` folder to GitHub Pages |
| 72 | +3. Site available at https://greenflux.github.io |
27 | 73 |
|
28 | | -## 🧞 Commands |
| 74 | +Workflow configuration: `.github/workflows/deploy.yml` |
29 | 75 |
|
30 | | -All commands are run from the root of the project, from a terminal: |
| 76 | +## Color Theme |
| 77 | + |
| 78 | +Dark theme with green accents: |
| 79 | + |
| 80 | +```css |
| 81 | +--color-dark: #0a0a0a /* Primary background */ |
| 82 | +--color-darker: #000000 /* Darker sections */ |
| 83 | +--color-green-primary: #00d600 /* Primary green accent */ |
| 84 | +--color-green-bright: #00ff00 /* Bright green hover */ |
| 85 | +--color-text-primary: #ffffff /* White text */ |
| 86 | +--color-text-secondary: #a0a0a0 /* Gray text */ |
| 87 | +``` |
| 88 | + |
| 89 | +## SEO Optimization |
| 90 | + |
| 91 | +- Open Graph meta tags for social media sharing |
| 92 | +- Twitter Card meta tags |
| 93 | +- Canonical URLs |
| 94 | +- robots.txt for search engine crawlers |
| 95 | +- sitemap.xml for search indexing |
| 96 | +- Optimized images with lazy loading |
| 97 | +- Semantic HTML structure |
| 98 | + |
| 99 | +## Adding Portfolio Items |
| 100 | + |
| 101 | +Edit `src/data/portfolio.json` and add a new object to the `items` array: |
| 102 | + |
| 103 | +```json |
| 104 | +{ |
| 105 | + "id": "unique-id", |
| 106 | + "title": "Project Title", |
| 107 | + "path": "/portfolio/project-slug", |
| 108 | + "description": "Project description", |
| 109 | + "image": "/images/project.png", |
| 110 | + "tags": ["JavaScript", "API"] |
| 111 | +} |
| 112 | +``` |
31 | 113 |
|
32 | | -| Command | Action | |
33 | | -| :------------------------ | :----------------------------------------------- | |
34 | | -| `npm install` | Installs dependencies | |
35 | | -| `npm run dev` | Starts local dev server at `localhost:4321` | |
36 | | -| `npm run build` | Build your production site to `./dist/` | |
37 | | -| `npm run preview` | Preview your build locally, before deploying | |
38 | | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | |
39 | | -| `npm run astro -- --help` | Get help using the Astro CLI | |
| 114 | +For external links, use full URLs in `path`. For internal detail pages, create a new file in `src/pages/portfolio/`. |
40 | 115 |
|
41 | | -## 👀 Want to learn more? |
| 116 | +## Performance Optimizations |
42 | 117 |
|
43 | | -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). |
| 118 | +- Lazy loading for below-the-fold images |
| 119 | +- Eager loading with fetchpriority="high" for critical images (logo, hero) |
| 120 | +- npm-based icon library (lucide-astro) instead of CDN |
| 121 | +- Optimized image formats and sizes |
| 122 | +- Minimal JavaScript footprint |
0 commit comments