Projects
Client work first, then academic and personal builds. Select a project to preview it, then open the brief for my part, the result, and the limits.

Ethical Capacity Lab Website
Full-Stack Web Developer (DoGoodie contract)
One public front door for The Ethical Capacity Lab, DoGoodie, and the Liberation from Suffering Network, routing five audiences to clear, bounded pathways.
Ethical Capacity Lab Website
Client Website / Next.js
Full-Stack Web Developer (DoGoodie contract)
Case summary
- Problem
- The Ethical Capacity Lab needed one public front door for itself and its two programs, DoGoodie and the Liberation from Suffering Network, so five different audiences could each find a clear next step.
- My part
- I built the whole site: pages and audience pathways, the submissions route, analytics consent, search setup, tests, and deployment. The client provided the content and direction. This site and the DoGoodie website came from the same DoGoodie contract, so they are one client engagement, not two clients.
- Key decision
- No database, CMS, or user accounts by design. Forms post to a server route that validates input before forwarding it to Formspree, which keeps the attack surface and running costs small for a content site.
- Result
- Live at ethicalcapacitylab.org, with a guided Start Here flow and a QR code entry point.
- Evidence
- The live site and its public code on GitHub.
- Limits
- Content changes need a code edit and a redeploy because there is no CMS, and form delivery depends on Formspree being available.
Gallery
Technical details
The public website for The Ethical Capacity Lab and the two programs it connects: DoGoodie (practical work) and the Liberation from Suffering Network (relationships). It routes five public audiences to distinct pathways while keeping public learning available without pressure. Built with the Next.js App Router and strict TypeScript: server-rendered pages with small client islands for navigation and forms, a POST-only server route that validates submissions before forwarding them to Formspree, and consent-gated Google Analytics 4. There is no database, CMS, or user accounts by design.
Key Features
- ▸Next.js App Router with strict TypeScript and server-rendered pages
- ▸Five audience pathways, with a guided Start Here flow and a QR code entry point
- ▸Server-side form validation at /api/submissions before Formspree delivery
- ▸Consent-gated Google Analytics 4 with advertising permissions kept denied
- ▸Search setup: metadata, sitemap, robots, and noindex on preview builds
- ▸Vitest unit tests, plus Playwright and axe route, form, and accessibility checks
Technologies
Brief loaded
