Rebrand from Casera/MyCrib to honeyDue
Total rebrand across Web project: - Package name: casera-web -> honeydue-web - Cookie: casera-token -> honeydue-token - Theme store: casera-theme -> honeydue-theme - File sharing: .casera -> .honeydue, component/function renames - casera-file-handler.tsx -> honeydue-file-handler.tsx - All UI text, metadata, OG tags updated - Domains: casera.treytartt.com -> honeyDue.treytartt.com - Demo data emails updated - All documentation updated Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+5
-5
@@ -1,8 +1,8 @@
|
||||
# Casera Web App — Build Plan Overview
|
||||
# honeyDue Web App — Build Plan Overview
|
||||
|
||||
## What We're Building
|
||||
|
||||
Full parity web app for Casera: **46 screens**, **104 API operations**, **4 domains** (Residences, Tasks, Contractors, Documents), plus auth, onboarding, subscriptions, settings, and a **sandboxed demo mode** with mock data.
|
||||
Full parity web app for honeyDue: **46 screens**, **104 API operations**, **4 domains** (Residences, Tasks, Contractors, Documents), plus auth, onboarding, subscriptions, settings, and a **sandboxed demo mode** with mock data.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
@@ -33,7 +33,7 @@ Full parity web app for Casera: **46 screens**, **104 API operations**, **4 doma
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
myCribAPI-Web/
|
||||
honeyDueAPI-Web/
|
||||
├── src/
|
||||
│ ├── app/ # Next.js App Router
|
||||
│ │ ├── (marketing)/ # Public pages (landing, pricing)
|
||||
@@ -86,7 +86,7 @@ myCribAPI-Web/
|
||||
|---|---|
|
||||
| Push notifications | Not needed (no push API for web in scope) |
|
||||
| Widgets | Not applicable |
|
||||
| .casera file import/export | File download (export) + drag-and-drop or file picker (import) |
|
||||
| .honeydue file import/export | File download (export) + drag-and-drop or file picker (import) |
|
||||
| Apple/Google Sign In | OAuth redirect flow (same backend endpoints) |
|
||||
| StoreKit subscription | Stripe Checkout or link to App Store (TBD) |
|
||||
| Camera capture | File upload input (no camera API needed) |
|
||||
@@ -112,4 +112,4 @@ myCribAPI-Web/
|
||||
| Demo mode data isolation | No backend calls, purely client-side, session-scoped store, no persistence |
|
||||
| API compatibility | 100% same endpoints, same token format (`Token <hex>`), same request/response shapes |
|
||||
| Mobile feature gaps | Push notifications and widgets explicitly excluded. Everything else covered. |
|
||||
| Deployment independence | Separate Dokku app, own domain (e.g., `app.casera.treytartt.com`), no coupling to Go API deployment |
|
||||
| Deployment independence | Separate Dokku app, own domain (e.g., `app.honeydue.treytartt.com`), no coupling to Go API deployment |
|
||||
|
||||
@@ -18,8 +18,8 @@ Scaffold the project, wire up auth, build the app shell, and establish the desig
|
||||
## 1. Project Scaffold
|
||||
|
||||
```bash
|
||||
npx create-next-app@latest myCribAPI-Web --typescript --tailwind --eslint --app --src-dir
|
||||
cd myCribAPI-Web
|
||||
npx create-next-app@latest honeyDueAPI-Web --typescript --tailwind --eslint --app --src-dir
|
||||
cd honeyDueAPI-Web
|
||||
npx shadcn@latest init
|
||||
```
|
||||
|
||||
@@ -33,9 +33,9 @@ npm install -D vitest @playwright/test
|
||||
## 2. TypeScript Types
|
||||
|
||||
Generate TypeScript types matching the Go API DTOs. Source from:
|
||||
- `myCribAPI-go/internal/dto/requests/` — request shapes
|
||||
- `myCribAPI-go/internal/dto/responses/` — response shapes
|
||||
- `myCribAPI-go/internal/models/` — entity shapes
|
||||
- `honeyDueAPI-go/internal/dto/requests/` — request shapes
|
||||
- `honeyDueAPI-go/internal/dto/responses/` — response shapes
|
||||
- `honeyDueAPI-go/internal/models/` — entity shapes
|
||||
|
||||
Key types to define in `src/lib/types/`:
|
||||
|
||||
@@ -73,7 +73,7 @@ api/
|
||||
|
||||
```typescript
|
||||
// src/lib/api/client.ts
|
||||
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'https://mycrib.treytartt.com/api';
|
||||
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'https://honeyDue.treytartt.com/api';
|
||||
|
||||
async function apiFetch<T>(
|
||||
path: string,
|
||||
@@ -225,7 +225,7 @@ Match the mobile app's theme system:
|
||||
| Desert | TBD | TBD |
|
||||
| Mint | TBD | TBD |
|
||||
|
||||
Theme values sourced from `MyCribKMM/composeApp/src/commonMain/.../ui/theme/ThemeColors.kt`.
|
||||
Theme values sourced from `HoneyDueKMM/composeApp/src/commonMain/.../ui/theme/ThemeColors.kt`.
|
||||
|
||||
### Spacing
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ Build sharing, subscriptions, notifications, profile, onboarding, and summary me
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Residence sharing: generate/display share code, join residence, manage users, .casera file export/import
|
||||
- [ ] Contractor sharing: .casera file export/import
|
||||
- [ ] Residence sharing: generate/display share code, join residence, manage users, .honeydue file export/import
|
||||
- [ ] Contractor sharing: .honeydue file export/import
|
||||
- [ ] Subscription: status display, feature comparison, upgrade prompt, usage tracking
|
||||
- [ ] Notification preferences: toggle + time picker per notification type
|
||||
- [ ] Profile: edit name/email, change password, delete account
|
||||
@@ -22,7 +22,7 @@ Build sharing, subscriptions, notifications, profile, onboarding, and summary me
|
||||
| Route | Screen | Description |
|
||||
|-------|--------|-------------|
|
||||
| `/app/residences/[id]/share` | Share Residence | Generate/display share code, manage users |
|
||||
| `/app/residences/join` | Join Residence | Enter share code or import .casera file |
|
||||
| `/app/residences/join` | Join Residence | Enter share code or import .honeydue file |
|
||||
|
||||
### Share Code Flow
|
||||
|
||||
@@ -35,15 +35,15 @@ Owner opens Share screen
|
||||
|
||||
Invitee opens Join screen
|
||||
→ Enter share code manually, OR
|
||||
→ Upload .casera file (drag-and-drop zone)
|
||||
→ Upload .honeydue file (drag-and-drop zone)
|
||||
→ POST /api/residences/join/ { code: "ABC123" }
|
||||
→ On success: redirect to residence detail
|
||||
```
|
||||
|
||||
### .casera File Handling
|
||||
### .honeydue File Handling
|
||||
|
||||
**Export** (owner):
|
||||
- Button on residence detail: "Export as .casera"
|
||||
- Button on residence detail: "Export as .honeydue"
|
||||
- Generates JSON file with `{ type: "residence", code: "ABC123", ... }`
|
||||
- Browser downloads the file
|
||||
|
||||
@@ -73,7 +73,7 @@ Invitee opens Join screen
|
||||
|
||||
## 2. Contractor Sharing
|
||||
|
||||
### .casera File Export/Import
|
||||
### .honeydue File Export/Import
|
||||
|
||||
**Export**:
|
||||
- Button on contractor detail: "Share Contractor"
|
||||
@@ -82,7 +82,7 @@ Invitee opens Join screen
|
||||
|
||||
**Import**:
|
||||
- Button on contractor list: "Import Contractor"
|
||||
- File picker or drag-and-drop for .casera file
|
||||
- File picker or drag-and-drop for .honeydue file
|
||||
- Read JSON, show confirmation dialog, create contractor
|
||||
- `POST /api/contractors/import/`
|
||||
|
||||
@@ -123,7 +123,7 @@ Check tier limits before allowing creation:
|
||||
### Upgrade Path (Phase 1)
|
||||
|
||||
Web users are directed to the mobile app for purchases:
|
||||
- "Download Casera on the App Store to upgrade"
|
||||
- "Download honeyDue on the App Store to upgrade"
|
||||
- Link to App Store listing
|
||||
|
||||
### Upgrade Path (Future — Phase 2)
|
||||
@@ -215,7 +215,7 @@ Add Stripe Checkout for web-only subscription purchases. Requires backend work t
|
||||
|
||||
```
|
||||
Step 1: Welcome
|
||||
→ "Welcome to Casera! Let's set up your first property."
|
||||
→ "Welcome to honeyDue! Let's set up your first property."
|
||||
|
||||
Step 2: Choose Path
|
||||
→ "Create a new residence" OR "Join an existing residence"
|
||||
@@ -300,7 +300,7 @@ Data sources:
|
||||
|
||||
At the end of Phase 3, you should have:
|
||||
1. Residence sharing with code generation, join flow, and user management
|
||||
2. Contractor sharing via .casera files
|
||||
2. Contractor sharing via .honeydue files
|
||||
3. Subscription status with tier limits and upgrade prompts
|
||||
4. Notification preferences with toggles
|
||||
5. Profile editing (name, email, password, delete account)
|
||||
|
||||
@@ -261,7 +261,7 @@ Persistent banner at the top of the demo app:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 🎯 You're exploring Casera in demo mode. [Sign Up Free] │
|
||||
│ 🎯 You're exploring honeyDue in demo mode. [Sign Up Free] │
|
||||
│ Changes aren't saved. Create an account to get started! │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -282,7 +282,7 @@ Before entering the demo, show a brief preview page:
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ 🏠 Try Casera — No Account Needed │
|
||||
│ 🏠 Try honeyDue — No Account Needed │
|
||||
│ │
|
||||
│ Manage your home maintenance, track tasks, │
|
||||
│ organize contractors, and store documents. │
|
||||
|
||||
+11
-11
@@ -162,7 +162,7 @@ const nextConfig = {
|
||||
output: 'standalone', // Required for Docker
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{ protocol: 'https', hostname: 'mycrib.treytartt.com' }, // API media
|
||||
{ protocol: 'https', hostname: 'honeyDue.treytartt.com' }, // API media
|
||||
],
|
||||
},
|
||||
};
|
||||
@@ -171,14 +171,14 @@ const nextConfig = {
|
||||
### Dokku Deployment
|
||||
|
||||
```bash
|
||||
# On mycribDev server
|
||||
dokku apps:create casera-web
|
||||
dokku domains:add casera-web app.casera.treytartt.com
|
||||
dokku config:set casera-web NEXT_PUBLIC_API_URL=https://mycrib.treytartt.com/api
|
||||
dokku letsencrypt:enable casera-web
|
||||
# On honeyDueDev server
|
||||
dokku apps:create honeydue-web
|
||||
dokku domains:add honeydue-web app.honeyDue.treytartt.com
|
||||
dokku config:set honeydue-web NEXT_PUBLIC_API_URL=https://honeyDue.treytartt.com/api
|
||||
dokku letsencrypt:enable honeydue-web
|
||||
|
||||
# Deploy
|
||||
git remote add dokku-web dokku@mycribDev:casera-web
|
||||
git remote add dokku-web dokku@honeyDueDev:honeydue-web
|
||||
git push dokku-web main
|
||||
```
|
||||
|
||||
@@ -316,17 +316,17 @@ Marketing and demo pages need proper meta tags:
|
||||
```typescript
|
||||
// src/app/(marketing)/page.tsx
|
||||
export const metadata: Metadata = {
|
||||
title: 'Casera — Home Maintenance Made Simple',
|
||||
title: 'honeyDue — Home Maintenance Made Simple',
|
||||
description: 'Track tasks, organize contractors, store documents. Manage your home maintenance in one place.',
|
||||
openGraph: {
|
||||
title: 'Casera — Home Maintenance Made Simple',
|
||||
title: 'honeyDue — Home Maintenance Made Simple',
|
||||
description: 'Track tasks, organize contractors, store documents.',
|
||||
images: ['/og-image.png'],
|
||||
type: 'website',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'Casera',
|
||||
title: 'honeyDue',
|
||||
description: 'Home Maintenance Made Simple',
|
||||
images: ['/og-image.png'],
|
||||
},
|
||||
@@ -391,7 +391,7 @@ Track same events as mobile app for consistent analytics.
|
||||
At the end of Phase 5, you should have:
|
||||
1. Fully responsive web app (mobile, tablet, desktop)
|
||||
2. Consistent loading, empty, and error states everywhere
|
||||
3. Deployed on Dokku at `app.casera.treytartt.com`
|
||||
3. Deployed on Dokku at `app.honeyDue.treytartt.com`
|
||||
4. E2E tests covering auth, CRUD, demo mode, and responsive viewports
|
||||
5. Optimized bundle with code splitting and image optimization
|
||||
6. SEO-ready marketing and demo pages
|
||||
|
||||
@@ -56,7 +56,7 @@ Task 6: Integration + Verification (sequential — cross-domain wiring)
|
||||
### Step 1: Install missing shadcn components and @dnd-kit
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web
|
||||
cd honeyDueAPI-Web
|
||||
npx shadcn@latest add dialog select textarea tabs skeleton tooltip popover calendar
|
||||
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities date-fns
|
||||
```
|
||||
@@ -688,7 +688,7 @@ export * from './use-documents';
|
||||
### Step 14: Verify build
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
Expected: Build succeeds with no type errors.
|
||||
@@ -1253,7 +1253,7 @@ export default function EditResidencePage({
|
||||
### Step 9: Verify build
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
Expected: Build succeeds. All 4 residence routes render.
|
||||
@@ -2198,7 +2198,7 @@ export default function TaskDetailPage({
|
||||
### Step 11: Verify build
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Step 12: Commit
|
||||
@@ -2282,7 +2282,7 @@ Follow the same patterns as Residences (Task 2). Key differences:
|
||||
### Step 9: Verify build
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Step 10: Commit
|
||||
@@ -2363,7 +2363,7 @@ Key differences from other domains:
|
||||
### Step 9: Verify build
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Step 10: Commit
|
||||
@@ -2442,7 +2442,7 @@ export default function DashboardPage() {
|
||||
### Step 2: Full build verification
|
||||
|
||||
```bash
|
||||
cd myCribAPI-Web && npm run build
|
||||
cd honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
Expected: Build succeeds. All routes compile. No type errors.
|
||||
|
||||
@@ -42,7 +42,7 @@ Task 7: Integration + Verification (sequential — cross-feature wiring)
|
||||
### Step 1: Install Recharts
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web
|
||||
npm install recharts
|
||||
```
|
||||
|
||||
@@ -282,7 +282,7 @@ export * from './use-subscription';
|
||||
### Step 9: Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Step 10: Commit
|
||||
@@ -302,7 +302,7 @@ git add -A && git commit -m "feat: add Phase 3 foundation — notification hooks
|
||||
- Create: `src/app/app/residences/join/page.tsx`
|
||||
- Create: `src/components/sharing/share-code-display.tsx`
|
||||
- Create: `src/components/sharing/user-management.tsx`
|
||||
- Create: `src/components/sharing/casera-file-handler.tsx`
|
||||
- Create: `src/components/sharing/honeydue-file-handler.tsx`
|
||||
- Create: `src/lib/hooks/use-sharing.ts`
|
||||
- Modify: `src/app/app/residences/[id]/page.tsx` (add Share button)
|
||||
- Modify: `src/app/app/contractors/[id]/page.tsx` (add Share/Export button)
|
||||
@@ -320,11 +320,11 @@ git add -A && git commit -m "feat: add Phase 3 foundation — notification hooks
|
||||
- Each user row: name, email, role badge (Owner/Member)
|
||||
- Owner can click "Remove" → ConfirmDialog → `residencesApi.removeResidenceUser(residenceId, userId)`
|
||||
|
||||
### .casera File Handler
|
||||
### .honeydue File Handler
|
||||
|
||||
**casera-file-handler.tsx** — Reusable component for both residence and contractor sharing:
|
||||
- **Export mode**: Takes data object, generates JSON `{ type: "residence"|"contractor", ... }`, triggers browser download as `.casera` file
|
||||
- **Import mode**: FileUpload drop zone accepting `.casera` files, reads JSON, validates type, calls callback with parsed data
|
||||
**honeydue-file-handler.tsx** — Reusable component for both residence and contractor sharing:
|
||||
- **Export mode**: Takes data object, generates JSON `{ type: "residence"|"contractor", ... }`, triggers browser download as `.honeydue` file
|
||||
- **Import mode**: FileUpload drop zone accepting `.honeydue` files, reads JSON, validates type, calls callback with parsed data
|
||||
- Uses `URL.createObjectURL` + anchor click for download
|
||||
- Uses `FileReader.readAsText` for import
|
||||
|
||||
@@ -332,19 +332,19 @@ git add -A && git commit -m "feat: add Phase 3 foundation — notification hooks
|
||||
|
||||
**Residence Share page** (`/app/residences/[id]/share`):
|
||||
- ShareCodeDisplay for generating/displaying share codes
|
||||
- .casera export button → downloads file with share code embedded
|
||||
- .honeydue export button → downloads file with share code embedded
|
||||
- UserManagement table
|
||||
- Only accessible to residence owner
|
||||
|
||||
**Residence Join page** (`/app/residences/join`):
|
||||
- Text input for manual code entry
|
||||
- .casera file import drop zone
|
||||
- .honeydue file import drop zone
|
||||
- On submit: calls `residencesApi.joinWithCode()` → redirect to residence detail
|
||||
|
||||
### Contractor Sharing
|
||||
|
||||
On contractor detail page, add "Share" button → generates .casera file with contractor data for download.
|
||||
On contractor list page, add "Import" button → opens import dialog → reads .casera file → creates contractor via API.
|
||||
On contractor detail page, add "Share" button → generates .honeydue file with contractor data for download.
|
||||
On contractor list page, add "Import" button → opens import dialog → reads .honeydue file → creates contractor via API.
|
||||
|
||||
### Query hooks
|
||||
|
||||
@@ -405,13 +405,13 @@ export function useJoinResidence() {
|
||||
### Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Commit
|
||||
|
||||
```bash
|
||||
git add -A && git commit -m "feat: add residence sharing (share code, join, user management) and contractor .casera export/import"
|
||||
git add -A && git commit -m "feat: add residence sharing (share code, join, user management) and contractor .honeydue export/import"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -489,7 +489,7 @@ export async function deleteAccount(): Promise<MessageResponse> {
|
||||
### Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Commit
|
||||
@@ -560,7 +560,7 @@ npx shadcn@latest add switch
|
||||
### Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Commit
|
||||
@@ -623,11 +623,11 @@ export const useOnboardingStore = create<OnboardingState>()((set) => ({
|
||||
|
||||
- Clean, centered layout (no sidebar or app shell)
|
||||
- Progress indicator (step dots or progress bar)
|
||||
- Casera logo at top
|
||||
- honeyDue logo at top
|
||||
|
||||
### Steps
|
||||
|
||||
**Step 0: Welcome** — "Welcome to Casera!" message, illustration, "Get Started" button
|
||||
**Step 0: Welcome** — "Welcome to honeyDue!" message, illustration, "Get Started" button
|
||||
|
||||
**Step 1: Choose Path** — Two cards: "Create a new residence" (House icon) and "Join an existing residence" (Users icon). Clicking sets path and advances.
|
||||
|
||||
@@ -637,7 +637,7 @@ export const useOnboardingStore = create<OnboardingState>()((set) => ({
|
||||
- **Step 4a: Complete** — "You're all set!" Redirect to `/app/residences/${id}`
|
||||
|
||||
**Path B — Join:**
|
||||
- **Step 2b: Join Residence** — Code input (6-char) or .casera file import. On submit: joins via API, advances.
|
||||
- **Step 2b: Join Residence** — Code input (6-char) or .honeydue file import. On submit: joins via API, advances.
|
||||
- **Step 3b: Complete** — "Welcome to the residence!" Redirect to residence detail.
|
||||
|
||||
### Onboarding trigger
|
||||
@@ -649,7 +649,7 @@ For now, just mark `localStorage.setItem('onboarding_complete', 'true')` after c
|
||||
### Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Commit
|
||||
@@ -714,7 +714,7 @@ On residence detail page (`src/app/app/residences/[id]/page.tsx`), add a "Downlo
|
||||
### Verify build
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Commit
|
||||
@@ -732,7 +732,7 @@ git add -A && git commit -m "feat: add enhanced dashboard with charts and task r
|
||||
### Step 1: Full build verification
|
||||
|
||||
```bash
|
||||
cd /Users/treyt/Desktop/code/MyCrib/myCribAPI-Web && npm run build
|
||||
cd /Users/treyt/Desktop/code/HoneyDue/honeyDueAPI-Web && npm run build
|
||||
```
|
||||
|
||||
### Step 2: Route verification
|
||||
@@ -766,8 +766,8 @@ git add -A && git commit -m "feat: complete Phase 3 — advanced features integr
|
||||
At the end of Phase 3, verify:
|
||||
|
||||
- [ ] **Residence sharing**: generate share code, copy, join with code, manage users (list/remove)
|
||||
- [ ] **Contractor sharing**: .casera file export from detail, import on list page
|
||||
- [ ] **.casera files**: download as JSON, import via drag-and-drop
|
||||
- [ ] **Contractor sharing**: .honeydue file export from detail, import on list page
|
||||
- [ ] **.honeydue files**: download as JSON, import via drag-and-drop
|
||||
- [ ] **Subscription**: status display with usage bars, feature comparison table, upgrade CTA
|
||||
- [ ] **Feature gating**: upgrade prompt dialog available for tier limit enforcement
|
||||
- [ ] **Notification preferences**: toggle switches per notification type, saves immediately
|
||||
|
||||
Reference in New Issue
Block a user