- BriefForm: buton "Generează cu AI" cheama /v1/research-briefs/draft si
precompleteaza titlul+rezumatul; textul spune explicit ca nimic nu s-a
salvat inca si arata costul real al generarii
- Briefing: afiseaza aiExplanation cand exista, cu nota ca prioritizarea
ramane deterministica si AI-ul doar explica
- pagina Companii: cautare Apollo prin ceo-api, salveaza cautarea ca
segment, creeaza research brief per rezultat
- pagina Segmente: reruleaza o cautare salvata, sterge
- pagina Research: listeaza briefs cu surse (linkuri catre Apollo/altele)
- Overview devine un briefing determinist (restante/urmatoarele 7 zile
+ activitate saptamanala), cu explicatia AI marcata explicit ca
neconstruita in loc de ascunsa
- login page (Supabase email/password sign-in + sign-up)
- onboarding: create first tenant, redirects into /dashboard once a
membership exists
- dashboard shell: sidebar nav, tenant switcher (x-tenant-id header,
never in body/query -- matches ceo-api's TenantGuard), sign out
- Organizations, Tasks, and Team (members/RBAC) pages wired to ceo-api
via a thin apiFetch wrapper that attaches the Supabase bearer token
- executive "paper & ink" design tokens (Tailwind) replacing defaults
- Dockerfile: declare NEXT_PUBLIC_* as build ARGs so Coolify's existing
build-time env vars actually get inlined (was previously silently
dropped, which would have crashed prerendering)
Next.js only emits .next/standalone, not an empty public/ dir when the
source has none -- the Dockerfile's COPY --from=build /app/public
failed outright since the path never existed.
Same class of bug as ceo-api/ceo-worker: plain npm install skips
devDependencies (typescript, tailwindcss, postcss) when NODE_ENV=production
is visible at build time, which next build needs. Switched to
npm ci --include=dev.