Client-side generator page with species (dog/cat) and theme selectors
submits a job to /api/pet-names POST, then polls GET until completed.
API uses nameGeneratorLimiter for rate limiting and delegates to
queueNameGenerationJob/getJobStatus from lib/server/ai.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each form checks orgConfig.applications to verify the type is enabled,
validates required fields, inserts into the applications table, and
sends email notification via sendApplicationNotification. Adoption form
supports optional pet pre-selection via ?pet=slug query param. Surrender
form auto-creates a pet record from submitted data.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- About, adoption process, become a foster, how to help, volunteer, why adopt pages
- All org name/email/contact info driven by data.orgConfig
- Foster resources page with optional FOSTER_RESOURCES_PASSWORD password gate
- Content blocks loaded from DB with sensible generic fallback text
- Application links conditionally shown based on orgConfig.applications flags
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Home page loads featured pets, upcoming events, content blocks, and stats
- Pets listing page with search/filter by species and sex, infinite scroll
- Pet detail page with photo gallery/lightbox, compatibility badges, and related pets
- /api/pets GET endpoint for infinite scroll pagination
- All schema adapted for pawprint (url, startDate, published, etc.)
- All org name references driven by data.orgConfig.orgInfo.name
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Initializes SvelteKit 2 + Svelte 5 project with adapter-node, Tailwind CSS 4,
Drizzle ORM (MySQL), Stripe, Nodemailer, and argon2 dependencies. Configures
app.html with PWA meta tags, app.css with brand color tokens, and manifest.json.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>