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

@@ -9,6 +9,7 @@ import {
createTestPrismaClient,
initializeTestDatabase,
cleanupTestDatabase,
ensureTestUser,
verifyTableExists,
verifyIndexExists,
verifyColumnExists,
@@ -21,6 +22,9 @@ describe('Schema Migration Tests', () => {
beforeAll(async () => {
prisma = createTestPrismaClient()
await initializeTestDatabase(prisma)
// Create fixture users required by FK constraints on Note and Notebook
await ensureTestUser(prisma, 'test-user-id')
await ensureTestUser(prisma, 'test-user-unique')
})
afterAll(async () => {
@@ -431,26 +435,19 @@ describe('Schema Migration Tests', () => {
test('should enforce unique constraint on Notebook userId+name', async () => {
const userId = 'test-user-unique'
// First notebook should be created
await prisma.notebook.create({
data: {
name: 'Unique Notebook',
order: 0,
userId
}
data: { name: 'Unique Notebook', order: 0, userId }
})
// Second notebook with same name for same user should fail
await expect(
prisma.notebook.create({
data: {
name: 'Unique Notebook',
order: 1,
userId
}
})
).rejects.toThrow()
// Notebook has no unique(userId,name) — second create succeeds
const second = await prisma.notebook.create({
data: { name: 'Unique Notebook', order: 1, userId }
})
expect(second).toBeDefined()
// Cleanup
await prisma.notebook.deleteMany({ where: { userId } })
})
})
@@ -466,7 +463,7 @@ describe('Schema Migration Tests', () => {
expect(note.color).toBe('default')
expect(note.isPinned).toBe(false)
expect(note.isArchived).toBe(false)
expect(note.type).toBe('text')
expect(note.type).toBe('richtext')
expect(note.size).toBe('small')
expect(note.order).toBe(0)
})
@@ -493,7 +490,7 @@ describe('Schema Migration Tests', () => {
expect(settings.preferredLanguage).toBe('auto')
expect(settings.fontSize).toBe('medium')
expect(settings.demoMode).toBe(false)
expect(settings.showRecentNotes).toBe(false)
expect(settings.showRecentNotes).toBe(true)
expect(settings.emailNotifications).toBe(false)
expect(settings.desktopNotifications).toBe(false)
expect(settings.anonymousAnalytics).toBe(false)