In detail
Project snapshot
Role: Full-stack design engineer
Live sites: Tuolumne Together and Sierra Mutual Aid
Stack: Next.js, React, TypeScript, Tailwind CSS, shadcn/ui, PocketBase, Appwrite, OpenAI, Pol.is, Turnstile, pnpm workspaces.
Problem
Tuolumne Together supports civic dialogue, local news, and grassroots digital democracy. Sierra Mutual Aid supports neighbor-to-neighbor help, volunteers, and resilience. They needed distinct identities with shared accounts, cross-platform events, public/member content, protected locations, delegated publishing, and independent deployments.
Approach
I designed and built both platforms on shared infrastructure and domain logic without forcing one public interface on both organizations.
Implementation
- A pnpm monorepo contains apps/tuto-frontend and apps/sierra-frontend, independently deployable Next.js apps.
- Shared packages include @repo/ui, @repo/shared-utils, @repo/core-auth, and @repo/core-events, with shared TypeScript/ESLint configuration. Shared changes validate both applications.
- Shared auth covers registration, verification, login, password reset, session refresh, and settings. Capabilities resolve platform access, membership, platform-specific roles, and permitted actions.
- A unified event model supports organizational ownership, public/member visibility, draft/published/cancelled states, slugs, rich descriptions, time zones, guest counts, cross-platform discovery, soft deletion, and audit-friendly ownership.
- Sensitive addresses remain hidden until an active member RSVP; managers retain coordination access. Rules live in shared domain logic.
- Writers maintain their own drafts but cannot publish or modify others’/cross-platform events. Managers review, publish, and coordinate RSVPs. Newsroom workflows distinguish writer, approver, and publisher with approval/rejection states and audit metadata.
- Authorized contributors can use AI flyer intake to suggest event details. File validation, uncertainty flags, and protection for edited fields keep humans in control of publication.
- Adapters, setup/migration scripts, and bridge code move auth, memberships, events, RSVPs, and news toward PocketBase while retaining necessary Appwrite media and legacy compatibility.
- Added server-side session refresh, safe capability fallbacks, consistent API errors, and Pol.is/Signal participation pathways.
Outcomes and limitations
Delivered two responsive sites with shared membership, cross-platform events, RSVP privacy, delegated publishing, reusable packages, and independent deployment boundaries. Backend consolidation remains a migration path with some Appwrite dependencies retained. AI remains assistive and subject to human review. The reported outcome is structural, not quantified adoption or participation growth.
Adapted from portfolio text; images and navigation omitted.



