Add demo account seed migration for App Store review.

Seeds demo@example.com with sample clients, business, and invoices via the Drizzle journal.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-17 23:14:45 -04:00
parent 5c28b33e9f
commit b7380f4348
2 changed files with 179 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
-- App Store review demo account: demo@example.com / demo123
DO $$
DECLARE
demo_user_id varchar(255) := 'a0000000-0000-4000-8000-000000000001';
demo_account_id text := 'a0000000-0000-4000-8000-000000000010';
demo_business_id varchar(255) := 'a0000000-0000-4000-8000-000000000020';
demo_client_acme varchar(255) := 'a0000000-0000-4000-8000-000000000030';
demo_client_bright varchar(255) := 'a0000000-0000-4000-8000-000000000031';
demo_invoice_draft varchar(255) := 'a0000000-0000-4000-8000-000000000040';
demo_invoice_sent varchar(255) := 'a0000000-0000-4000-8000-000000000041';
demo_invoice_paid varchar(255) := 'a0000000-0000-4000-8000-000000000042';
demo_password_hash text := '$2b$12$90U31okgkhOwSQD5RDqHwO0QpcC.pkKsqKb1IPnHfKUZm/2A9hzs6';
BEGIN
IF EXISTS (SELECT 1 FROM "beenvoice_user" WHERE "email" = 'demo@example.com') THEN
RETURN;
END IF;
INSERT INTO "beenvoice_user" (
"id", "name", "email", "emailVerified", "password", "role"
) VALUES (
demo_user_id,
'Demo User',
'demo@example.com',
true,
demo_password_hash,
'user'
);
INSERT INTO "beenvoice_account" (
"id", "userId", "accountId", "providerId", "password"
) VALUES (
demo_account_id,
demo_user_id,
demo_user_id,
'credential',
demo_password_hash
);
INSERT INTO "beenvoice_business" (
"id", "name", "nickname", "email", "phone", "addressLine1", "city", "state",
"postalCode", "country", "isDefault", "createdById"
) VALUES (
demo_business_id,
'Demo Studio LLC',
'Demo Studio',
'hello@demostudio.example',
'(555) 010-2000',
'100 Market Street',
'San Francisco',
'CA',
'94105',
'United States',
true,
demo_user_id
);
INSERT INTO "beenvoice_client" (
"id", "name", "email", "phone", "defaultHourlyRate", "currency", "createdById"
) VALUES
(
demo_client_acme,
'Acme Corporation',
'billing@acme.example',
'(555) 010-3001',
150,
'USD',
demo_user_id
),
(
demo_client_bright,
'Bright Labs',
'ap@brightlabs.example',
'(555) 010-3002',
125,
'USD',
demo_user_id
);
INSERT INTO "beenvoice_invoice" (
"id", "invoiceNumber", "invoicePrefix", "businessId", "clientId",
"issueDate", "dueDate", "status", "totalAmount", "taxRate", "notes", "currency", "createdById"
) VALUES
(
demo_invoice_draft,
'INV-DEMO-001',
'#',
demo_business_id,
demo_client_acme,
NOW() - INTERVAL '5 days',
NOW() + INTERVAL '25 days',
'draft',
1500,
0,
'Website redesign — phase 1',
'USD',
demo_user_id
),
(
demo_invoice_sent,
'INV-DEMO-002',
'#',
demo_business_id,
demo_client_bright,
NOW() - INTERVAL '20 days',
NOW() - INTERVAL '5 days',
'sent',
2500,
0,
'Mobile app consulting',
'USD',
demo_user_id
),
(
demo_invoice_paid,
'INV-DEMO-003',
'#',
demo_business_id,
demo_client_acme,
NOW() - INTERVAL '45 days',
NOW() - INTERVAL '15 days',
'paid',
3200,
0,
'API integration project',
'USD',
demo_user_id
);
INSERT INTO "beenvoice_invoice_item" (
"id", "invoiceId", "date", "description", "hours", "rate", "amount", "position"
) VALUES
(
'a0000000-0000-4000-8000-000000000050',
demo_invoice_draft,
NOW() - INTERVAL '5 days',
'UX wireframes and design system',
10,
150,
1500,
0
),
(
'a0000000-0000-4000-8000-000000000051',
demo_invoice_sent,
NOW() - INTERVAL '20 days',
'Sprint planning and implementation',
20,
125,
2500,
0
),
(
'a0000000-0000-4000-8000-000000000052',
demo_invoice_paid,
NOW() - INTERVAL '45 days',
'Backend API work',
16,
150,
2400,
0
),
(
'a0000000-0000-4000-8000-000000000053',
demo_invoice_paid,
NOW() - INTERVAL '44 days',
'Deployment and documentation',
5.33,
150,
800,
1
);
END $$;
+7
View File
@@ -99,6 +99,13 @@
"when": 1781194385000,
"tag": "0013_invoice_public_token_expiry",
"breakpoints": true
},
{
"idx": 14,
"version": "7",
"when": 1781300000000,
"tag": "0014_seed_demo_account",
"breakpoints": true
}
]
}