Technology Choices and Decision Framework
This document expands the decision framework and records technology comparisons and rationale.
Evaluation Criteria
- Team expertise and learning curve
- Community/ecosystem maturity and documentation quality
- Performance and scalability
- SEO/UX impact (for web)
- Code reuse potential (web/mobile/shared)
- Total cost of ownership (hosting, licenses, dev time)
- Long-term viability and hiring market
Frontend Web Frameworks
| Criteria | Next.js (Chosen) | Nuxt.js | Remix | Gatsby |
|---|---|---|---|---|
| SEO (SSR/SSG/ISR) | Excellent | Excellent | Excellent | Good (SSG first) |
| Ecosystem | Very large | Large | Growing | Declining |
| Performance profile | Excellent | Excellent | Excellent | Good |
| Learning curve | Medium | Medium | Medium | Medium |
| Hosting | Vercel native | Vercel/Netlify | Fly.io/Node | Static/CDN |
| Decision | SELECTED | Alt | Future option | Not ideal |
Rationale: ISR + App Router flexibility, ecosystem maturity, Vercel-native deployments.
Mobile Frameworks
| Criteria | Expo + React Native (Chosen) | Flutter | Native |
|---|---|---|---|
| Code reuse (web) | High (TS) | Low (Dart) | None |
| Performance | Very good | Excellent | Best |
| OTA updates | EAS Update | Limited | None |
| Ecosystem | Very large | Large | Large |
| Team expertise | High (JS/TS) | Medium (Dart) | Medium |
| Decision | SELECTED | Alternate | Not cost-effective |
Rationale: Maximizes reuse of TS models, utilities, and business logic with web.
State Management (Web)
| Criteria | TanStack Query + Zustand (Chosen) | Redux Toolkit | MobX | Recoil |
|---|---|---|---|---|
| Server state | Excellent | Good | Good | Good |
| Client state | Good | Good | Good | Fair |
| Complexity | Low | Medium | Medium | Medium |
| Bundle size | Small | Medium | Small | Medium |
| Decision | SELECTED | Alternate | Alternate | Avoid |
Rationale: Separation of concerns and minimal overhead.
Backend/API
| Criteria | Laravel (Chosen) | Node/Express | NestJS | Go |
|---|---|---|---|---|
| Team expertise | High | Medium | Medium | Medium |
| Ecosystem | Excellent (PHP) | Excellent | Good | Good |
| Performance | Very good | Good | Good | Excellent |
| Admin tooling | Filament/Nova | Strapi (JS), custom | Custom | Custom |
| Decision | SELECTED | Alternate | Alternate | Specialized |
Rationale: Integrates well with WordPress/Acorn, strong ecosystem.
Search
- Phase B: WordPress native search + cached queries
- Phase C: Algolia or Elasticsearch (cost/performance trade-offs)
Databases
- Phase B: MySQL/MariaDB (existing WP), Laravel adjunct DB for analytics
- Phase C: MySQL primary with read replicas; consider Postgres if needed (migrations impact)
Hosting/Infra
- Web: Vercel (Next.js)
- Mobile: EAS (Expo)
- API: Managed VPS/Forge or containerized on ECS/Fargate
- Cache/Queues: Managed Redis
- Search: Algolia SaaS (earlier), Elasticsearch (self/managed) later
Decision Log (ADR-style)
- ADR-001: Choose Next.js for web (2025-10-09)
- ADR-002: Choose Expo RN for mobile (2025-10-09)
- ADR-003: Choose Laravel for API (2025-10-09)
- ADR-004: Choose Redis for cache (2025-10-09)
- ADR-005: Choose Filament for admin (Phase C) (2025-10-09)