Skip to content
Duku Constantin

Project / 2026

ThinkUp Intranet

Invite-only intranet for ThinkUp Academy with a county and zone map.

Role
Tech Director. Author of all 38 commits.
Team
Team of 3, built with the ThinkUp team.
  • Next.js
  • TypeScript
  • Tailwind
  • Supabase
  • Clerk
  • Leaflet
  • Resend
Repository ↗Internal tool
  1. Problem
  2. What I built
  3. Result
  4. In the code
  5. Size

01

Problem

ThinkUp Academy runs work across departments and a National Program with schools, counties and ambassador students. It needed one internal place for tasks, meetings, decisions and that program.

02

What I built

Postgres row level security decides access. The interface mirrors those rules and server actions check them again. A county changes zone only through one database function, and the map color comes from the zone table.

03

Result

An internal, invite-only intranet with 6 roles, 3 departments and a student platform. Schools and ambassador students follow their county when it changes zone. More than 20 ThinkUp people use it daily to assign tasks, create projects, follow ambassador students and give feedback.

04

In the code

  • Permission rules are pure functions with tests.

    src/lib/permissions.ts

  • The service role key lives in one server-only file.

    src/lib/supabase/admin.ts

  • County to zone moves go through move_county() and write a history row.

    supabase/migrations/20261004000000_intranet_schema.sql

  • County boundaries come from public data, reduced to code and name.

    scripts/build-counties-geojson.ts

  • School contact data stays out of activity logs.

    supabase/migrations/20261004000500_pn.sql

05

Size

  • 38 commits
  • 16 migrations
  • 7 test files
  • 6 roles, 3 departments

← All work