seedproject-web/README.md

98 lines
3.9 KiB
Markdown
Raw Normal View History

# 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/<slug>/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.