# EdenStudio — Astro Theme Customization Map
> Machine-readable guide for developers and AI assistants customizing this theme.
> Human-readable docs: see README.md in the project root.
## Overview
EdenStudio is a premium portfolio/agency theme for Astro 7.0.7.
Target audience: freelancers, design agencies, creative studios.
Author: Noel Dario Andres | License: MIT
Stack: Astro 7, Lenis smooth scroll, Content Collections, vanilla CSS, @astrojs/sitemap.
No Tailwind. No React/Vue/Svelte islands on the homepage.
---
## Quick Customization Checklist
1. astro.config.mjs → site URL
2. src/layouts/Layout.astro → SEO defaults, Schema.org, Lenis config
3. src/styles/global.css → colors, fonts, design tokens
4. src/components/Navbar.astro → brand name, nav links, social links, email
5. src/components/Footer.astro → brand, tagline, links, copyright
6. src/components/Hero.astro → headline, badge, CTAs, hero image
7. src/components/Services.astro → service cards (inline HTML)
8. src/components/Process.astro → steps array
9. src/components/Contact.astro → email, location, form options, backend hook
10. src/content/portfolio/*.md → case studies + cover images in src/assets/
11. src/content/blog/*.md → blog posts (optional, can be removed entirely)
12. public/og-image.png → add Open Graph image (not included)
13. public/robots.txt → update sitemap domain
---
## File Map
### Configuration
| File | Purpose | Key edits |
|------|---------|-----------|
| astro.config.mjs | Astro config | `site` (production URL), sitemap integration, prefetch |
| src/content.config.ts | Content schemas | `portfolio` and `blog` collection field definitions |
| package.json | Dependencies | Node >= 22.12.0 required |
| public/robots.txt | Crawler rules | Sitemap URL line |
### Layout & Global
| File | Purpose | Key edits |
|------|---------|-----------|
| src/layouts/Layout.astro | Base HTML shell | Default title/description/ogImage props, Schema.org JSON-LD (name, founder, address), background grid + gradient blobs, Lenis init script, imports Navbar/Footer/CustomCursor |
| src/styles/global.css | Design system | :root CSS variables (colors, fonts, easing, container width), typography, utility classes (.text-gradient, .glass-panel, .section-badge, .container), Lenis scroll lock class |
| src/pages/index.astro | Homepage assembly | Import/order of section components: Hero, Services, Portfolio, Process, Contact |
### Components (Homepage Sections)
| File | Section ID | Key edits |
|------|-----------|-----------|
| src/components/Hero.astro | #hero | Badge text, headline (.char-reveal lines), description, CTA buttons/links, hero image import (src/assets/hero-bg.png), parallax script |
| src/components/Services.astro | #services | Section header copy, 3 hardcoded service cards (icon SVG, title, desc, bullet list). Duplicate .service-card-wrapper to add cards |
| src/components/Portfolio.astro | #portfolio | Section header copy only — projects loaded from content collection |
| src/components/Process.astro | #process | `steps` array (num, title, desc, tag), section header copy, scroll-tracked timeline script |
| src/components/Contact.astro | #contact | Email, location, section copy, `projectTypes` checkbox array, form labels. Submit handler is simulated — replace setTimeout in script with real API call |
| src/components/Navbar.astro | — | Logo text (Eden/Studio), desktop nav links, mobile drawer links, CTA button, mobile email + socials |
| src/components/Footer.astro | — | CTA heading, brand logo + tagline, nav/social/resource columns, copyright, legal links |
| src/components/CustomCursor.astro | — | Custom cursor behavior. Remove from Layout.astro to disable. Responds to data-cursor-hover and data-cursor-text attributes |
### Pages (Dynamic Routes)
| File | Route | Key edits |
|------|-------|-----------|
| src/pages/portfolio/[id].astro | /portfolio/{slug} | Project detail template — reads from portfolio collection. Back link, hero, markdown body, next-project navigation |
| src/pages/blog/index.astro | /blog | Blog listing — reads from blog collection, filters drafts |
| src/pages/blog/[id].astro | /blog/{slug} | Blog post detail — markdown body, sidebar meta, next-post link |
### Content Collections
| Directory | Schema fields | Notes |
|-----------|--------------|-------|
| src/content/portfolio/ | title, client, year, tags[], cover (image), order?, description | Filename = URL slug. Body = markdown case study. Cover path relative to file: ../../assets/image.png |
| src/content/blog/ | title, description, pubDate, author, tags[], cover? (image), draft? | Filename = URL slug. Set draft: true to hide. Body = markdown article |
Schema definitions: src/content.config.ts
### Assets
| Path | Used by |
|------|---------|
| src/assets/hero-bg.png | Hero.astro |
| src/assets/project-1.png | content/portfolio/project-1.md |
| src/assets/project-2.png | content/portfolio/project-2.md |
| src/assets/project-3.png | content/portfolio/project-3.md |
| public/favicon.svg | Layout.astro head |
| public/favicon.ico | Browser fallback |
| public/og-image.png | NOT INCLUDED — add for social sharing |
Images in src/assets/ are optimized by Astro's Image component at build time.
---
## Design Tokens (src/styles/global.css)
```
--bg-dark: #030303
--accent-emerald: hsl(150, 80%, 48%) ← primary accent
--accent-purple: hsl(263, 85%, 65%) ← secondary accent
--text-primary: #ffffff
--text-secondary: #a0a0a5
--text-muted: #646469
--font-heading: 'Outfit', sans-serif
--font-body: 'Plus Jakarta Sans', sans-serif
--container-max-width: 1400px
```
Fonts loaded via Google Fonts @import at top of global.css.
---
## Navigation Anchors
Homepage sections use hash anchors:
- /#hero → Hero
- /#services → Services
- /#portfolio → Portfolio (works)
- /#process → Process
- /#contact → Contact
- /blog → Blog index (separate page)
Nav links defined in Navbar.astro and Footer.astro.
---
## Contact Form Integration
File: src/components/Contact.astro (script block at bottom)
Current behavior: preventDefault → loading state → 1.5s setTimeout → success overlay.
No backend connected. Integrate Formspree, Netlify Forms, or custom fetch() in the submit handler.
Form fields: name, email, services (checkboxes from projectTypes array), message (textarea).
---
## Lenis Smooth Scroll
File: src/layouts/Layout.astro (script block at bottom)
Config: duration 1.2, wheelMultiplier 1.1, touchMultiplier 1.5.
Re-initializes on astro:page-load (view transitions).
Emits custom event: lenis-scroll (used by Process timeline).
---
## Removing Features
### Remove blog
1. Delete src/pages/blog/
2. Delete src/content/blog/
3. Remove blog collection from src/content.config.ts
4. Remove Blog links from Navbar.astro and Footer.astro
### Remove custom cursor
Remove from src/layouts/Layout.astro
### Remove a homepage section
Remove import + component tag from src/pages/index.astro
Remove corresponding nav link from Navbar.astro and Footer.astro
---
## SEO & Structured Data
Default meta: src/layouts/Layout.astro props (title, description, ogImage).
Per-page overrides: pass props to on any page.
Schema.org: ProfessionalService type in Layout.astro (name, founder, address, priceRange).
Sitemap: auto-generated by @astrojs/sitemap at /sitemap-index.xml on build.
---
## Deployment
Static output. Build: npm run build → dist/
Set astro.config.mjs site URL and public/robots.txt before deploy.
Compatible with Vercel, Netlify, Cloudflare Pages, GitHub Pages.
---
## Missing Pages (buyer must create or update links)
Footer links to /privacy-policy and /terms-of-service — pages not included.
Either create src/pages/privacy-policy.astro and src/pages/terms-of-service.astro,
or update hrefs in Footer.astro.
---
## Authorship
Theme Creator: Noel Dario Andres
License: MIT License (see LICENSE file)