# SeedProject base A cloneable foundation for building websites — a static [Astro](https://astro.build) frontend with a PHP backend. Clone it, set one config file, and build out a new site (a lawyer's office, a roofing company, a niche publication) the way you'd spin up a new WordPress install — but faster to host and safer to run. ## What's inside | Path | Role | "WordPress equivalent" | |------|------|------------------------| | `app/` | Astro theme — layouts, components, content collections, sample post | theme + posts | | `api/` | [SeedProject](api/.memory/documentation.md) PHP framework — the dynamic backend (DB, forms, metrics) | PHP core | | `site.config.json` | **Single source of site identity** — the one file you edit per site | wp-config + Site Settings | ## Quick start — spin up a new site ```bash git clone https://repo.carlosarias.com/carlos/seedproject-web.git my-site cd my-site ./scripts/new-site.sh # prompts for name/URL/author → writes site.config.json, # stamps every engine, (optionally) resets git + installs deps cd app && npm run build # builds the static site into ./public ``` Then point a web server's document root at `./public` and alias `/api` to `./api` (see [Backend](#backend-api)). ## The one file you edit: `site.config.json` All site identity lives here: ```json { "name": "Acme Roofing", "url": "https://acmeroofing.com", "description": "Denver's trusted roofing contractor since 1998.", "tagline": "Roofs done right", "language": "en", "timezone": "America/Denver", "topic": "residential and commercial roofing", "audience": "Denver-area homeowners and property managers", "author": { "slug": "acme", "name": "Acme Roofing", "jobTitle": "...", "avatar": "/avatar-placeholder.png", "bio": "...", "longBio": "...", "knowsAbout": [], "sameAs": [] }, "social": { "twitter": "" } } ``` After editing it, run: ```bash node scripts/configure.mjs ``` This stamps the values into the Astro theme (`app/src/config/site.json`). `new-site.sh` runs it for you. ## Backend (`api/`) The `api/` directory is the SeedProject PHP framework, meant to be served at `/api` on the same domain (the static frontend calls it same-origin). It needs: - **Composer deps:** `cd api && composer install` - **Config:** `api/config.php` with your database credentials (git-ignored). Until the CLI installer ships (see below), create it by hand or use the framework's web installer under `api/install/`. - **A PHP-FPM handler** in your web server for `/api`, with a front-controller rewrite to `api/index.php`. Example Apache/nginx snippets are in [`api/.memory/foundation.md`](api/.memory/foundation.md). > **Planned — the Foundation:** a `php console app:install` (DB + config + schema) > and `php console db:migrate`, plus a two-tier auth layer and a `/api/health` > round-trip. Design + implementation plan: [`api/.memory/foundation.md`](api/.memory/foundation.md) > and [`api/.memory/foundation-plan.md`](api/.memory/foundation-plan.md). ## Authoring content Add a post by creating `app/src/content/blog//index.mdx` following the schema in `app/src/content.config.js` (copy the sample `welcome` post as a template). ## Directory layout ``` my-site/ ├── site.config.json ← edit this ├── scripts/ │ ├── new-site.sh ← one-time setup for a fresh clone │ └── configure.mjs ← stamp site.config.json into every engine ├── app/ ← Astro frontend (build → ../public) ├── api/ ← SeedProject PHP backend (served at /api) └── public/ ← build output (git-ignored) ``` ## What's git-ignored Secrets (`**/.env`, `api/config.php`), dependencies (`node_modules/`, `api/vendor/`), build output (`public/`, `app/dist/`), and per-site runtime state. A fresh clone installs deps and generates the rest.