feat: design system overhaul — sidebar, AI chats, settings, brainstorm, color cleanup
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 12s

- Sidebar: dynamic brand-accent colors, brainstorm section restyled
- AI chat general: popup panel with expand/collapse, hides when contextual AI open
- AI chat contextual: tabs reordered (Actions first), X close button, height fix
- Settings: all tabs restyled, 6 new color presets (sage, terracotta, iron, etc.)
- Global color cleanup: emerald/orange hardcoded → brand-accent dynamic
- Brainstorm page: orange → brand-accent throughout
- PageEntry animation component added to key pages
- Floating AI button: bg-brand-accent instead of hardcoded black
- i18n: all 15 locales updated with new AI/billing keys
- Billing: freemium quota tracking, BYOK, stripe subscription scaffolding
- Admin: integrated into new design
- AGENTS.md + CLAUDE.md project rules added
This commit is contained in:
Antigravity
2026-05-16 12:59:30 +00:00
parent 1fcea6ed7d
commit bd495be965
2284 changed files with 395285 additions and 2327 deletions

View File

@@ -21,6 +21,10 @@ export async function initializeTestDatabase(prisma: PrismaClient) {
await prisma.$connect()
}
export async function setupTestEnvironment(): Promise<void> {
// no-op — environment is ready via Docker
}
/**
* Cleanup test database
* Disconnects Prisma client and cleans all data
@@ -39,6 +43,7 @@ export async function cleanupTestDatabase(prisma: PrismaClient) {
await prisma.session.deleteMany()
await prisma.account.deleteMany()
await prisma.verificationToken.deleteMany()
await prisma.subscription.deleteMany()
await prisma.user.deleteMany()
await prisma.$disconnect()
} catch (error) {
@@ -46,12 +51,25 @@ export async function cleanupTestDatabase(prisma: PrismaClient) {
}
}
/**
* Ensure a test user exists with the given ID (upsert by id).
* Needed because PostgreSQL enforces FK constraints on Note.userId / Notebook.userId.
*/
export async function ensureTestUser(prisma: PrismaClient, userId: string): Promise<void> {
await prisma.user.upsert({
where: { id: userId },
create: { id: userId, email: `${userId}@test-fixture.internal` },
update: {},
})
}
/**
* Create sample test data
*/
export async function createSampleNotes(prisma: PrismaClient, count: number = 10) {
const notes = []
const userId = 'test-user-123'
await ensureTestUser(prisma, userId)
for (let i = 0; i < count; i++) {
const note = await prisma.note.create({
@@ -79,6 +97,7 @@ export async function createSampleNotes(prisma: PrismaClient, count: number = 10
export async function createSampleAINotes(prisma: PrismaClient, count: number = 10) {
const notes = []
const userId = 'test-user-ai'
await ensureTestUser(prisma, userId)
for (let i = 0; i < count; i++) {
const note = await prisma.note.create({