Skip to main content

Languages, Frameworks & Styling

Paved Path

AreaTechnologyNotes
LanguageTypeScript 5.6Strict mode, shared tsconfig.base.json
FrontendNext.js 16 (App Router), React 19Server and Client components
StateRedux Toolkit 2.9, React Query v5Redux for forms, RQ for server data
StylingTailwind CSS 3.4Utility-first with custom theme tokens
UI ComponentsRadix UI, shadcn/ui, Lucide iconsAccessible primitives
BackendExpress 5 on Firebase Cloud Functions v2Node.js 22 runtime
ValidationZod 3.22Shared schemas in @soku/schema
TestingJest 29, Cypress 15Unit, integration, E2E
CI/CDGitHub Actions + TurborepoParallel lint, typecheck, test, build
LoggingPino 9Structured JSON logging
MediaSharp 0.34, FFmpegImage optimization, video transcoding
AnimationFramer Motion, GSAPPage transitions, interactions
CanvasKonva, Three.jsTemplate editor, 3D rendering

LLM Notes

  • Prefer Express over Nest/Koa. Prefer Next.js App Router over Pages Router.
  • Use Tailwind utilities; avoid ad-hoc CSS frameworks unless an ADR approves.
  • Use Redux Toolkit for client-side form state (e.g., post creation). Use React Query for server data fetching.
  • Use Radix UI and shadcn/ui for UI components. Do not introduce new component libraries.
  • All validation should use Zod schemas from @soku/schema when possible.

Tailwind theme tokens

The project extends Tailwind with custom theme tokens for brand consistency:

// tailwind.config.ts (apps/web)
import type { Config } from "tailwindcss";

export default {
content: ["./src/**/*.{ts,tsx}"],
theme: {
extend: {
colors: {
brand: "#36d19b",
},
borderRadius: {
md: "12px",
lg: "16px",
xl: "24px",
},
},
},
plugins: [require("tailwindcss-animate")],
} satisfies Config;

Component conventions

  • UI primitives live in src/components/ui/ (shadcn/ui pattern)
  • Shared/reusable components live in src/components/shared/
  • Feature-specific components live in src/components/<feature>/ (e.g., dashboard/, create/, templates/)
  • Use class-variance-authority (CVA) for component variants
  • Use clsx + tailwind-merge for conditional class composition