Version: 1.0 Last Updated: 2026-03-03 Audience: QA interns, new testers, manual testing team Product: OpenLintel — End-to-End Home Design Automation Platform
- Introduction & Testing Philosophy
- Environment Setup
- Test Data & Accounts
- How to Report Bugs
- Module 1: Authentication & Onboarding
- Module 2: Dashboard & Project Management
- Module 3: Room Management
- Module 4: File Upload System
- Module 5: Floor Plan Digitization
- Module 6: Photo-to-3D Reconstruction
- Module 7: Style Quiz & Mood Board
- Module 8: AI Design Generation
- Module 9: 3D Interactive Editor
- Module 10: Bill of Materials (BOM)
- Module 11: Technical Drawings
- Module 12: CNC Cut List & Nesting
- Module 13: MEP Engineering
- Module 14: Building Code Compliance
- Module 15: Project Timeline & Scheduling
- Module 16: Change Orders
- Module 17: Site Logs
- Module 18: Quality Assurance & Punch List
- Module 19: Collaboration Hub
- Module 20: Procurement & Purchase Orders
- Module 21: Delivery Tracking
- Module 22: Payments & Invoices
- Module 23: Financial Reports
- Module 24: Analytics Dashboard
- Module 25: AI Predictions
- Module 26: Budget Optimizer
- Module 27: Sustainability Scoring
- Module 28: Contractor Marketplace
- Module 29: Product Catalogue
- Module 30: Vendor Performance Management
- Module 31: Offcuts Exchange Marketplace
- Module 32: Digital Twin & IoT
- Module 33: Maintenance Scheduling
- Module 34: Warranty Tracking
- Module 35: Handover Package
- Module 36: AR/VR Viewer
- Module 37: Portfolio Management
- Module 38: Developer API Portal
- Module 39: Notifications System
- Module 40: Admin Panel
- Module 41: Settings & Preferences
- Module 42: Localization & Currency
- Cross-Cutting Tests
- Performance Testing
- Security Testing
- Mobile Responsiveness Testing
- Test Completion Checklist
OpenLintel is a home design automation platform. Think of it as a one-stop shop where homeowners upload room photos, get AI-generated interior designs, receive technical construction documents, manage procurement, track construction progress, and maintain their homes after completion.
Your job is to:
- Click every button and verify it does what it's supposed to
- Try to break things — enter wrong data, upload wrong files, click things in wrong order
- Check what the user sees — does it look right? Is the text correct? Are numbers formatted properly?
- Document everything — if something looks wrong, even slightly, report it
For each test case below, you will see:
- TC-XX.YY: Test case number (Module.Case)
- Steps: Exactly what to do (follow step by step)
- Expected Result: What should happen if everything is working
- Priority: P0 (critical), P1 (important), P2 (nice-to-have)
| Term | Meaning |
|---|---|
| Route | The URL path (e.g., /dashboard means go to http://localhost:3000/dashboard) |
| API call | Background request the app makes to the server (visible in browser DevTools → Network tab) |
| Toast | Small popup notification that appears briefly at bottom of screen |
| Dialog/Modal | A popup box that appears over the page with a form or confirmation |
| Skeleton | Gray placeholder bars shown while content is loading |
| Badge | Small colored label (e.g., "Modern" or "Premium") |
Before you start testing, ensure the following are running:
# 1. Clone the repository
git clone https://github.com/allgpt-co/openlintel.git
cd openlintel
# 2. Install dependencies
pnpm install
# 3. Copy environment file
cp .env.example .env
# Fill in required values (ask your team lead)
# 4. Start the database
docker-compose up -d postgres redis minio meilisearch
# 5. Run database migrations
pnpm db:push
# 6. Seed test data (if available)
pnpm db:seed
# 7. Start the web application
pnpm dev
# 8. Start microservices (if testing AI features)
# In separate terminals:
cd services/design-engine && python main.py
cd services/vision-engine && python main.py
cd services/bom-engine && python main.py
# ... etc.| Service | URL |
|---|---|
| Web App | http://localhost:3000 |
| API (tRPC) | http://localhost:3000/api/trpc |
| MinIO Console | http://localhost:9001 |
| Meilisearch | http://localhost:7700 |
| Design Engine | http://localhost:8001 |
| Vision Engine | http://localhost:8010 |
Test on:
- Chrome (latest) — Primary browser
- Firefox (latest) — Secondary
- Safari (latest) — If on Mac
- Mobile Chrome (Android) — Responsive testing
- Mobile Safari (iOS) — Responsive testing
- Browser DevTools (F12) — For checking network requests, console errors, local storage
- Multiple browser profiles — For testing multi-user collaboration
- Test image files — Room photos, floor plan images (JPEG, PNG, PDF)
- Screen recording tool — For recording bugs (e.g., Loom, OBS)
| Account | Role | Login Method | Purpose |
|---|---|---|---|
| testuser1@gmail.com | user | Google OAuth | Primary tester (homeowner) |
| testuser2@gmail.com | user | Google OAuth | Secondary tester (collaboration) |
| testadmin@gmail.com | admin | Google OAuth | Admin panel testing |
| githubuser@test.com | user | GitHub OAuth | GitHub OAuth testing |
Note: Ask your team lead for actual test account credentials. If using local dev, any Google/GitHub account will work.
Create a folder called test-files/ with these files:
| File | Type | Size | Purpose |
|---|---|---|---|
room-photo-1.jpg |
JPEG | ~2MB | Valid room photo |
room-photo-2.png |
PNG | ~3MB | Valid room photo (different format) |
floor-plan.jpg |
JPEG | ~1MB | Floor plan image |
floor-plan.pdf |
~5MB | Floor plan PDF | |
large-file.jpg |
JPEG | ~15MB | Over 10MB limit (should be rejected) |
not-an-image.txt |
Text | ~1KB | Wrong file type (should be rejected) |
malicious.html |
HTML | ~1KB | Potential XSS file (should be rejected) |
tiny-image.jpg |
JPEG | ~10KB | Very small image |
webp-image.webp |
WebP | ~1MB | WebP format test |
animated.gif |
GIF | ~2MB | GIF format test |
When you find a bug, report it with this format:
**Title**: [Short description of the bug]
**Module**: [Which module/feature]
**Priority**: P0/P1/P2
**Test Case**: TC-XX.YY
**Environment**:
- Browser: Chrome 120
- OS: macOS 14 / Windows 11 / Ubuntu 22.04
- Screen resolution: 1920x1080
- Device: Desktop / Mobile
**Steps to Reproduce**:
1. Go to [URL]
2. Click [button/link]
3. Enter [data]
4. Click [submit]
**Expected Result**: [What should happen]
**Actual Result**: [What actually happened]
**Screenshots/Video**: [Attach]
**Console Errors**: [Copy from DevTools Console]
**Network Errors**: [Copy from DevTools Network tab]
| Priority | Definition | Example |
|---|---|---|
| P0 | App crashes, data loss, security issue, login broken | Cannot sign in, payment charged but not recorded |
| P1 | Feature doesn't work, blocking workflow | Cannot create project, BOM generation fails |
| P2 | Minor UI issue, cosmetic problem, edge case | Button misaligned, wrong date format |
Steps:
- Open http://localhost:3000 in an incognito/private browser window
- Click "Sign In" or "Get Started" button
- Verify you're redirected to
/auth/signin - Click "Sign in with Google"
- Google consent screen appears
- Select your Google test account
- Grant permissions
Expected Result:
- Redirected to
/dashboard - Your name and profile picture appear in top-right corner
- Dashboard loads with either empty state or your projects
Things to Check:
- No console errors (F12 → Console)
- Session cookie is set (DevTools → Application → Cookies)
- No flash of unauthenticated content
Steps:
- Open http://localhost:3000 in an incognito browser window
- Navigate to
/auth/signin - Click "Sign in with GitHub"
- Authorize the application on GitHub
- Grant permissions
Expected Result:
- Same as TC-1.01 but using GitHub account
- Name and avatar from GitHub shown
Steps:
- Open an incognito browser window (not signed in)
- Try to navigate directly to:
/dashboard - Try to navigate directly to:
/project/some-id - Try to navigate directly to:
/admin
Expected Result:
- Each URL should redirect to
/auth/signin - After signing in, user should be redirected back to the originally requested URL
Steps:
- Sign in to the application
- Click your avatar/profile in the top-right corner
- Click "Sign Out" from the dropdown menu
Expected Result:
- Redirected to
/auth/signin - Attempting to visit
/dashboardredirects back to sign-in - Session cookie is cleared
Steps:
- Sign in to the application
- Close the browser tab (not the browser)
- Open a new tab and navigate to http://localhost:3000/dashboard
Expected Result:
- User is still signed in
- Dashboard loads without requiring re-authentication
Steps:
- Sign in to the application
- Open 3 different pages in separate tabs:
/dashboard/analytics/marketplace
- Sign out from one tab
Expected Result:
- All tabs should recognize the sign-out (next navigation should redirect to sign-in)
- No stale data shown
Steps:
- Sign in with a new account (no projects)
- Navigate to
/dashboard
Expected Result:
- Empty state shown with appropriate message (e.g., "No projects yet")
- "Create Project" button visible and prominent
- No error messages in console
Steps:
- Navigate to
/dashboard - Click "Create Project" button
- Fill in form:
- Name: "Test Living Room Project"
- Address: "123 Test Street, Mumbai"
- Unit System: Metric
- Click "Create"
Expected Result:
- Dialog closes
- New project card appears in dashboard
- Project card shows: name, status "draft", address
- Toast notification: "Project created successfully" (or similar)
Edge Cases to Test:
- Empty name → Should show validation error
- Very long name (200+ characters) → Should handle gracefully
- Special characters in name (
<script>alert('xss')</script>) → Should be escaped, not executed - Create with only name (no address) → Should work (address is optional)
Steps:
- Click "Create Project"
- Set Unit System to "Imperial"
- Fill other fields and create
Expected Result:
- Project created with imperial unit system
- All dimensions in the project shown in feet/inches instead of mm
Steps:
- Click on a project card from the dashboard
- Observe the project overview page
Expected Result:
- URL changes to
/project/[id] - Project header shows: name, status, address
- Sidebar navigation appears with all project sections
- Room cards shown (or empty state if no rooms)
Steps:
- Navigate to a project
- Find and click the delete option
- Confirm deletion in the confirmation dialog
Expected Result:
- Confirmation dialog appears before deletion
- After confirmation, redirected to
/dashboard - Deleted project no longer appears in project list
- All associated rooms, designs, BOMs removed (verify in DB if possible)
Edge Case:
- Cancel the delete confirmation → Project should remain
Steps:
- Create 5 different projects with different names
- View dashboard
Expected Result:
- All 5 projects shown as cards
- Cards arranged in grid layout
- Each card shows correct name and status
- Clicking each card navigates to correct project
Steps:
- Navigate to a project with no rooms
- Go to
/project/[id]/rooms
Expected Result:
- Empty state message shown
- "Add Room" button visible
Steps:
- Navigate to
/project/[id]/rooms - Click "Add Room"
- Fill in form:
- Name: "Master Bedroom"
- Type: bedroom
- Length: 4000 (mm)
- Width: 3500 (mm)
- Click "Create"
Expected Result:
- Dialog closes
- New room card appears
- Card shows: "Master Bedroom", bedroom badge, "4000 × 3500 mm"
- Height defaults to 2700mm
Steps:
- Create one room for each room type:
- living_room, bedroom, kitchen, bathroom, dining
- study, balcony, utility, foyer, corridor
- pooja_room, store, garage, terrace, other
- Verify each is created with correct type badge
Expected Result:
- All 15 room types can be selected and created
- Each type shows appropriate badge/label
Steps:
- Click "Add Room"
- Try each invalid case: a. Empty name → Submit b. Name only (no dimensions) → Submit c. Negative dimensions (-1000) → Submit d. Zero dimensions (0) → Submit e. Extremely large dimensions (999999999) → Submit
Expected Result:
- (a) Validation error: Name is required
- (b) Should either show error or use default dimensions
- (c-d) Should show error or prevent negative/zero values
- (e) Should handle gracefully (may allow but should not crash)
Steps:
- Click on a room card
- Navigate to
/project/[id]/rooms/[roomId]
Expected Result:
- Room name, type, dimensions displayed
- Photo upload zone visible
- Design variants section shown (empty if none)
Steps:
- Navigate to room detail page
- Click delete option
- Confirm deletion
Expected Result:
- Room removed from list
- Associated designs should also be handled (deleted or orphaned gracefully)
Steps:
- Navigate to a room detail page
- Locate the file upload zone
- Drag and drop
room-photo-1.jpgonto the zone - Observe upload progress
Expected Result:
- Progress bar shows: 10% → 30% → 80% → 100%
- Photo appears in room gallery after upload
- Thumbnail generated and visible
- No console errors
Steps:
- Same as TC-4.01 but with
room-photo-2.png
Expected Result: Same as TC-4.01
Steps:
- Upload
webp-image.webp
Expected Result:
- Upload succeeds
- WebP image displayed correctly
Steps:
- Upload
animated.gif
Expected Result:
- Upload succeeds
- GIF displayed (animation may or may not be preserved in thumbnail)
Steps:
- Upload
floor-plan.pdf - Set category to "floor_plan"
Expected Result:
- PDF uploads successfully
- File listed with PDF icon
- Downloadable/viewable
Steps:
- Try to upload
large-file.jpg(15MB, exceeds 10MB limit)
Expected Result:
- Upload rejected with error message: "File too large (max 10MB)" or similar
- No file stored on server
- Error message shown to user (toast or inline)
Steps:
- Try to upload
not-an-image.txt
Expected Result:
- Upload rejected with error message about invalid file type
- Only image/* and application/pdf accepted
- Clear error message to user
Steps:
- Try to upload
malicious.html
Expected Result:
- Upload rejected (not an allowed MIME type)
- No HTML content served to users
Steps:
- Click the upload zone (instead of drag-drop)
- File picker opens
- Select a valid image
- Confirm
Expected Result:
- File picker opens correctly
- Selected file uploads successfully
- Same behavior as drag-drop
Steps:
- Select or drag multiple files at once (3-4 images)
Expected Result:
- Either all files upload (if multi-upload supported) OR
- Clear indication that only single file is accepted per upload
Steps:
- Sign out
- Try to POST directly to
/api/uploadusing DevTools or curl:curl -X POST http://localhost:3000/api/upload -F "file=@room-photo-1.jpg"
Expected Result:
- Request rejected with 401 Unauthorized
- No file stored
Steps:
- Navigate to
/project/[id]/floor-plan - Verify "Upload" tab is active
- Upload a floor plan image (
floor-plan.jpg) - Verify upload succeeds
Expected Result:
- Floor plan image shown as thumbnail
- "Digitize" button becomes available
Steps:
- After uploading floor plan (TC-5.01)
- Click "Digitize" button
- Observe processing status
Expected Result:
- Job starts (status: pending → running)
- Progress indicator shown
- Frontend polls every 2 seconds (check Network tab)
- After completion:
- "Viewer" tab activates
- Detected rooms shown as colored polygons on SVG
Note: This test requires Vision Engine service running. If not available, verify:
- Job is created in DB
- API call to vision engine is made
- Job status updates are polled
Steps:
- After digitization completes
- Click "Viewer" tab
- Test interactions:
- Zoom in (click + button or scroll)
- Zoom out (click - button or scroll)
- Pan (drag canvas)
- Hover over room polygon
- Click on a room polygon
Expected Result:
- SVG viewer renders correctly
- Room polygons color-coded by type
- Room labels show name, type, area
- Zoom range: 25% - 300%
- Pan works smoothly
- Hover changes polygon opacity
- Click shows room info toast
Steps:
- After digitization completes
- Click "Detected Rooms" tab
- Review detected rooms list
- Click "Create Rooms"
Expected Result:
- All detected rooms created in project
- Rooms appear in
/project/[id]/rooms - Room types match AI detection
- Dimensions match extracted measurements
Steps:
- Upload
floor-plan.pdfinstead of image - Click "Digitize"
Expected Result:
- PDF processed correctly (converted to image internally)
- Same digitization flow as with image
Steps:
- Navigate to
/project/[id]/reconstruction - Upload 3-5 room photos from different angles
- Optionally provide reference object (e.g., "door height = 2100mm")
- Click "Start Reconstruction"
Expected Result:
- Job starts and progress shown
- On completion: 3D model viewer loads
- Measurements displayed with confidence scores
- Model can be orbited, zoomed, panned
Note: Requires Vision Engine service. If not available, verify API call is made.
Steps:
- Upload only 1 photo
- Try to start reconstruction
Expected Result:
- Either error message (minimum photos required) OR
- Reconstruction proceeds but with lower confidence scores
Steps:
- Navigate to
/project/[id]/style-quiz - Complete each step:
- Step 1: Select 3-5 style images
- Step 2: Choose color palettes
- Step 3: Select budget tier (e.g., "Premium")
- Step 4: Enter functional requirements
- Step 5: Review mood board
Expected Result:
- Each step navigates correctly (Next/Back buttons)
- Step 5 shows generated mood board with:
- Images matching selected styles
- Color palette visualization
- Style summary text
- Preferences saved to project
Steps:
- Try to skip to Step 5 without completing earlier steps
Expected Result:
- Either prevented (must complete in order) OR
- Works with default values for skipped steps
Steps:
- Navigate to
/project/[id]/designs - Click "Generate Design"
- Fill dialog:
- Room: Select a room
- Name: "Modern Living V1"
- Style: "modern"
- Budget: "premium"
- Click "Generate"
Expected Result:
- Design variant created in list
- Job starts (check progress indicator)
- Frontend polls job status every 2 seconds
- On completion:
- Render image(s) displayed on design card
- Design card shows name, style badge, budget badge
Note: Requires Design Engine + valid LLM API key. Without API key, expect error message about missing key.
Steps:
- Ensure no LLM API key is configured in settings
- Try to generate a design
Expected Result:
- Clear error message about missing API key
- Suggestion to add key in Settings
Steps:
- Generate 3 design variants for the same room:
- Variant 1: Modern, Premium
- Variant 2: Minimalist, Mid-range
- Variant 3: Traditional, Economy
Expected Result:
- All 3 variants appear in list
- Each has distinct style and budget badges
- Can filter/view by room
Steps:
- Click on a completed design variant card
- Navigate to
/project/[id]/designs/[designId]
Expected Result:
- Full render image displayed
- Design specification viewable
- Actions available: Generate BOM, Generate Drawings, Approve
Steps:
- Verify all 10 styles appear in the dropdown:
- modern, traditional, minimalist, scandinavian, industrial
- bohemian, contemporary, mid_century, japandi, art_deco
Expected Result: All 10 styles selectable
Steps:
- Verify all 4 tiers appear:
- economy, mid_range, premium, luxury
Expected Result: All 4 tiers selectable
Steps:
- Navigate to
/project/[id]/editor - Select a room from the dropdown
Expected Result:
- 3D viewport loads (WebGL canvas)
- Room geometry visible (walls, floor)
- Toolbar visible at top
- Furniture catalogue visible on left
- Property panels on right
Steps:
- Browse furniture catalogue (left panel)
- Click a furniture item (e.g., "Sofa")
- Furniture appears in viewport
Expected Result:
- Furniture object added to scene at room center
- Object visible and properly scaled
- Object selectable by clicking
Steps:
- Select a furniture object (click it)
- Press G key or select Move tool from toolbar
- Drag the furniture to a new position
Expected Result:
- Move gizmo appears (colored axes)
- Object follows mouse movement
- Position updates in real-time
Steps:
- Select a furniture object
- Press R key or select Rotate tool
- Rotate the object
Expected Result:
- Rotation gizmo appears
- Object rotates smoothly
- Snap to increments if grid snap is enabled
Steps:
- Select a furniture object
- Press S key or select Scale tool
- Scale the object
Expected Result:
- Scale gizmo appears
- Object resizes proportionally
Steps:
- Select a furniture object
- Press Delete key
Expected Result:
- Object removed from scene
- No console errors
Steps:
- Select a furniture object
- Press Escape key
Expected Result:
- Object deselected
- Bounding box and gizmos disappear
Steps:
- Select a furniture object
- Open Material Panel (right sidebar)
- Choose a different material preset
- Try color picker
Expected Result:
- Material updates on 3D object in real-time
- Color changes reflected immediately
Steps:
- Toggle grid visibility (show/hide)
- Change grid size (0.1m, 0.25m, 0.5m, 1m)
- Toggle snap on/off
- Move furniture with snap on → off
Expected Result:
- Grid overlay appears/disappears
- Grid density changes with size selection
- With snap ON: furniture snaps to grid increments
- With snap OFF: furniture moves freely
Steps:
- Click view preset buttons:
- Perspective
- Isometric
- Front
- Side
- Top
Expected Result:
- Camera transitions to correct view angle
- Scene remains visible from each view
Steps:
- Verify all keyboard shortcuts work:
- V → Select tool
- G → Move tool
- R → Rotate tool
- S → Scale tool
- M → Measure tool
- Delete → Remove selected
- Escape → Deselect
Expected Result: Each shortcut activates the correct tool
Steps:
- Open the editor in Browser Window A (User 1)
- Open the same project's editor in Browser Window B (User 2, different account)
- In Window A: place a furniture item
- In Window A: move the furniture
Expected Result:
- In Window B: furniture item appears automatically
- In Window B: furniture movement reflected in real-time
- User presence indicators shown (avatars)
- Remote user cursors visible (colored dots)
Steps:
- Toggle ceiling visibility on/off
Expected Result:
- Ceiling geometry shows/hides
- Allows looking down into room when ceiling is hidden
Steps:
- Navigate to
/project/[id]/bom - Select a design variant from dropdown
- Click "Generate BOM"
- Wait for job to complete
Expected Result:
- Job starts, progress shown
- On completion: BOM table displays
- Table has categorized items with quantities and prices
- Grand total calculated correctly
Steps:
- Click "Name" column header → sort alphabetically
- Click again → reverse sort
- Click "Unit Price" header → sort by price
- Click "Total" header → sort by total
Expected Result:
- Items re-order correctly on each click
- Sort direction toggles (ascending ↔ descending)
- Sort icon updates to show direction
Steps:
- Click category header (e.g., "Furniture") to collapse
- Click again to expand
Expected Result:
- Items under category hide on collapse
- Items reappear on expand
- Subtotal always visible
Steps:
- Click "Export" dropdown
- Select "CSV"
Expected Result:
- CSV file downloads to browser
- Open file and verify:
- All items present
- Columns: name, specification, category, quantity, unit, unitPrice, total, wasteFactor
- Numbers are correct
- Grand total included
Steps:
- Click "Export" → "Excel"
Expected Result:
- Browser navigates to
/api/bom/export/[bomId]?format=xlsx - XLSX file downloads
- Open in Excel: data formatted correctly
Steps:
- Click "Export" → "PDF"
Expected Result:
- PDF file downloads
- Open: formatted report with items, categories, totals
Steps:
- Check if BOM displays amounts in user's preferred currency
- Change currency preference in settings
- Regenerate or refresh BOM
Expected Result:
- Currency symbol matches preference ($, ₹, €, £)
- Amounts formatted correctly for locale
Steps:
- Navigate to
/project/[id]/drawings - Select a design variant
- Select drawing types (e.g., Floor Plan, Elevation)
- Click "Generate"
Expected Result:
- Job starts, progress shown
- On completion:
- Drawing previews rendered (SVG in browser)
- Download buttons for each format (DXF, PDF, SVG, IFC)
Steps:
- Click "Download DXF" for a generated drawing
Expected Result:
- DXF file downloads
- File can be opened in AutoCAD or DXF viewer
Steps:
- Click "Download PDF" for a generated drawing
Expected Result:
- PDF file downloads
- File opens in PDF reader with proper drawings
Steps:
- Generate each drawing type:
- Floor Plan
- Elevation
- Section
- Reflected Ceiling Plan (RCP)
- Flooring Layout
- Electrical Layout
Expected Result: Each type generates successfully with relevant content
Steps:
- Navigate to
/project/[id]/cutlist - Select a design variant (must have BOM generated)
- Click "Generate Cut List"
Expected Result:
- Job processes
- On completion:
- Panel schedule table shown
- Hardware schedule shown
- Nesting diagram visualized
- Total sheets needed displayed
- Waste percentage shown
Steps:
- After cut list generation
- Examine nesting diagram
Expected Result:
- Visual layout of panels on standard sheets (8×4 ft)
- Color-coded by panel type
- Waste areas visible
- Waste percentage reasonable (typically < 20%)
Steps:
- Navigate to
/project/[id]/mep - Select "Electrical" tab
- Select design variant
- Click "Calculate"
Expected Result:
- Job processes
- Results show:
- Circuit load calculations
- Wire gauge recommendations
- Breaker sizing
- Standards cited (NEC references)
Steps:
- Select "Plumbing" tab
- Click "Calculate"
Expected Result:
- Pipe sizing results
- Water supply calculations
- IPC standards cited
Steps:
- Select "HVAC" tab
- Click "Calculate"
Expected Result:
- Cooling/heating load (BTU)
- Equipment recommendations
- ASHRAE standards cited
Steps:
- Navigate to
/project/[id]/compliance - Trigger compliance check
Expected Result:
- Report generated with pass/fail per code section
- Non-compliant items flagged with code references
- Recommended fixes provided
Steps:
- Navigate to
/project/[id]/timeline - Click "Generate Timeline"
Expected Result:
- Gantt chart displayed with tasks
- Each task: name, duration, start/end date, progress
- Dependencies shown (arrows between tasks)
- Critical path highlighted
- Trade-based coloring
Steps:
- Click "Milestones" tab
Expected Result:
- Milestone list displayed
- Each: name, due date, status
- Can update milestone status
Steps:
- Click a milestone
- Link a payment to it
Expected Result:
- Payment linked successfully
- Milestone shows "Payment Linked" indicator
Steps:
- Navigate to
/project/[id]/change-orders - Click "Create Change Order"
- Fill in:
- Title: "Upgrade countertop material"
- Description: "Change from laminate to granite"
- Submit
Expected Result:
- Change order created with status "proposed"
- Cost impact analysis shown (AI-generated)
- Timeline impact shown
Steps:
- Click on a proposed change order
- Click "Approve"
Expected Result:
- Status changes to "approved"
- Relevant stakeholders notified
Steps:
- Click on a proposed change order
- Click "Reject"
- Add rejection reason
Expected Result:
- Status changes to "rejected"
- Reason recorded
Steps:
- Navigate to
/project/[id]/site-logs - Click "Add Site Log"
- Fill in:
- Date: Today
- Title: "Day 1 — Demolition started"
- Notes: "Removed old kitchen cabinets..."
- Weather: Sunny
- Workers: 5
- Upload 2 photos
- Tags: progress
- Submit
Expected Result:
- Site log created and appears in list
- Photos attached and viewable
- All fields displayed correctly
Steps:
- Create 3 site logs with different dates
- View the logs list
Expected Result:
- Logs shown in chronological order
- Each log displays date, title, weather, worker count
Steps:
- Navigate to
/project/[id]/quality - View checkpoint list
Expected Result:
- Stage-gate checkpoints listed
- Each shows title, trade, status
Steps:
- Click a checkpoint (e.g., "Electrical rough-in")
- Go through checklist items (check each)
- Upload inspection photos
- Mark as "Passed"
Expected Result:
- Checklist items toggle correctly
- Photos attached
- Status updates to "Passed"
Steps:
- Click a checkpoint
- Leave some items unchecked
- Mark as "Failed"
- Add notes about issues
Expected Result:
- Status updates to "Failed"
- Punch list items created for failed items
Steps:
- Click "Add Punch List Item"
- Fill in:
- Title: "Scratch on bedroom door"
- Description: "Deep scratch on lower panel"
- Severity: Minor
- Category: Carpentry
- Room: Master Bedroom
- Upload photo
- Submit
Expected Result:
- Item created with status "open"
- Photo attached
- Severity badge displayed
Steps:
- Click an open punch list item
- Update status to "resolved"
- Upload "after" photo
- Add resolution notes
Expected Result:
- Status changes to "resolved"
- Before/after photos visible
Steps:
- Navigate to
/project/[id]/collaboration - Click "New Thread"
- Fill in:
- Title: "Kitchen design feedback"
- Category: design_decision
- Submit
Expected Result:
- Thread created and appears in list
- Status: "open"
Steps:
- Open a thread
- Type a message: "I think we should go with the minimalist design"
- Submit
Expected Result:
- Message appears in thread
- Timestamp and author shown
- Real-time for other users viewing the thread
Steps:
- In a thread, type: "@testuser2 what do you think?"
- Submit
Expected Result:
- Message posted with mention highlighted
- testuser2 receives notification
Steps:
- Open an active thread
- Click "Resolve"
Expected Result:
- Thread status changes to "resolved"
- Thread moves to resolved section/filter
Steps:
- Navigate to a design variant
- Click "Request Approval"
- Select reviewer
Expected Result:
- Approval record created (status: pending)
- Reviewer notified
- Approval status visible on design card
Steps:
- Log in as the reviewer
- Navigate to the approval
- Click "Approve" (or "Reject" with notes)
Expected Result:
- Status updates to "approved" or "rejected"
- Requester notified
- Notes captured if rejected
Steps:
- Navigate to
/project/[id]/procurement - Ensure BOM is generated
- Click "Generate Orders"
Expected Result:
- Procurement service optimizes orders
- Draft POs generated
- Each PO shows: vendor, items, total, expected delivery
Steps:
- Click on a draft PO
- Review items and totals
- Click "Submit"
Expected Result:
- PO status changes to "submitted"
- Confirmation toast
Steps:
- Update PO status through lifecycle:
- submitted → confirmed → shipped → delivered
Expected Result:
- Each status transition works
- Status badge updates
- Delivery date fields editable
Steps:
- Navigate to
/project/[id]/deliveries - View delivery list
Expected Result:
- All deliveries listed
- Each shows: vendor, description, status, expected date
Steps:
- Mark a delivery as "delivered"
- Complete inspection checklist:
- ☐ Correct items received
- ☐ Quantities match
- ☐ No damage
- ☐ Quality acceptable
- Upload inspection photos
- Mark as "inspected"
Expected Result:
- Checklist items toggle correctly
- Photos attached to delivery
- Status updates to "inspected"
Steps:
- Navigate to
/project/[id]/payments - View summary cards
Expected Result:
- Cards show: Total Budget, Total Paid, Pending, Remaining
- Numbers are correctly calculated
- Currency symbols correct
Steps:
- Click "Create Payment"
- Fill form:
- Amount: 1000
- Currency: USD
- Provider: Stripe
- Milestone: (select one)
- Click "Pay"
Expected Result:
- Payment record created (status: pending)
- Redirected to Stripe checkout page
- Complete payment on Stripe
- Redirected back to app
- Payment status: completed
- Toast: "Payment successful"
Note: Use Stripe test mode card: 4242 4242 4242 4242
Steps:
- Try creating payment with: a. Amount: 0 → Should reject b. Amount: -100 → Should reject c. Amount: blank → Should reject
Expected Result: All invalid amounts rejected with validation error
Steps:
- Click "Invoices" tab
- View invoice list
Expected Result:
- Invoices listed with: number, date, amount, status
- Click invoice to view/download PDF
Steps:
- Navigate to
/project/[id]/financial-reports - View report sections
Expected Result:
- Budget vs. Actuals chart displayed
- Category breakdown chart/table
- Expenditure timeline shown
- Numbers match payment records
Steps:
- Navigate to
/analytics - View overview cards and charts
Expected Result:
- Total Projects count matches actual
- Active Projects count is correct
- Spending Trend chart shows 6 months
- Project Status Distribution chart correct
- Design Styles chart shows usage
- Budget Distribution shows tier counts
Steps:
- Navigate to
/project/[id]/analytics - View project metrics
Expected Result:
- Budget vs. actual chart
- Timeline progress bar
- Cost breakdown accurate
Steps:
- Navigate to
/project/[id]/predictions - View cost prediction
Expected Result:
- Predicted cost with confidence interval (low-high)
- Risk factors listed and ranked
- Breakdown by phase shown
Steps:
- View timeline prediction on same page
Expected Result:
- Predicted duration (days)
- Confidence interval
- Critical risks listed
Steps:
- Navigate to
/project/[id]/budget-optimizer - View optimization scenarios
Expected Result:
- Multiple scenarios presented (e.g., Maximum Savings, Balanced, Premium)
- Each shows: savings amount, percentage, substitutions, quality impact
- Can accept or reject each scenario
Steps:
- Navigate to
/project/[id]/sustainability - View report
Expected Result:
- Overall score (0-100)
- Carbon footprint breakdown
- LEED points assessment
- Green alternatives suggested
Steps:
- Navigate to
/marketplace - View contractor cards
Expected Result:
- Cards display in 3-column grid
- Each card: name, company, rating (stars), city, specializations, verified badge
- Pagination works (Next/Previous)
Steps:
- Type "electrician" in search box
- Wait 300ms for debounce
Expected Result:
- Results filter to match search query
- Debounce works (no API call per keystroke)
- Results update smoothly
Steps:
- Click "Mumbai" city filter button
- Results filter to Mumbai contractors only
- Click "Delhi" → Results show Delhi contractors
- Click "All" → All contractors shown
Expected Result:
- City filter buttons toggle correctly
- Active filter highlighted
- Results update immediately
Steps:
- Check "Carpentry" checkbox
- Check "Electrical" checkbox (multi-select)
- Observe filter chips appear
- Click × on "Electrical" chip to remove
Expected Result:
- Results filter by selected specializations
- Filter chips display active filters
- Removing chip updates results
- "Show More" expands full specialization list
Steps:
- Apply search, city, and specialization filters
- Click "Clear All"
Expected Result:
- All filters reset
- Full contractor list shown
- Filter chips removed
Steps:
- Click a contractor card
- Navigate to
/marketplace/[contractorId]
Expected Result:
- Full profile page loads
- Shows: bio, portfolio gallery, certifications, reviews, contact info
- "Hire" button visible
Steps:
- Click "Hire" on a contractor profile
- Fill hire dialog:
- Select project
- Role: "General Contractor"
- Amount: 50000
- Start date: Next week
- Submit
Expected Result:
- Contractor assignment created
- Confirmation shown
- Contractor appears in project's vendor list
Steps:
- Ensure there are >12 contractors in the system
- Click "Next" page
- Click "Previous" page
Expected Result:
- 12 contractors per page
- Page navigation works correctly
- No duplicate contractors across pages
Steps:
- Navigate to
/marketplace/catalogue - Browse by category
- Search for a product
Expected Result:
- Products listed with images, names, prices
- Category browsing works
- Search returns relevant results
Steps:
- Click a product
Expected Result:
- Full product details shown
- Multi-vendor price comparison
- Specifications and dimensions displayed
Steps:
- Navigate to
/project/[id]/vendors - View vendor list
Expected Result:
- Vendors listed with ratings
- Delivery, quality, pricing scores shown
- Order history accessible
Steps:
- Navigate to
/marketplace/offcuts - Click "List Material"
- Fill in:
- Title: "Marine Plywood 8mm"
- Material: Wood
- Quantity: 2 sheets
- Condition: New
- Price: $50
- Upload photo
- Submit
Expected Result:
- Listing created and appears in marketplace
- Status: active
- Photo displayed
Steps:
- Browse offcut listings
- Click a listing for details
- Click "Inquire"
- Send message to seller
Expected Result:
- Inquiry sent
- Seller receives notification
- Inquiry appears in seller's inbox
Steps:
- Navigate to
/project/[id]/digital-twin - View 3D model
Expected Result:
- 3D model of completed space loads
- Can orbit, zoom, pan
- IoT devices section visible
Steps:
- Click "Add Device"
- Fill in:
- Name: "Living Room Thermostat"
- Type: temperature
- Room: Living Room
- Submit
Expected Result:
- Device added to digital twin
- Appears on 3D model
- Dashboard shows device
Steps:
- Navigate to
/project/[id]/maintenance - View schedule list
Expected Result:
- Maintenance items listed
- Each shows: item, category, frequency, next due date, cost estimate
- Overdue items highlighted
Steps:
- Click a maintenance item
- Click "Log Maintenance"
- Fill in:
- Date performed
- Performed by
- Cost
- Notes
- Submit
Expected Result:
- Maintenance logged
- Next due date recalculated
- Log appears in history
Steps:
- Navigate to
/project/[id]/warranties - Click "Add Warranty"
- Fill in:
- Item: "Kitchen Chimney"
- Brand: "Elica"
- Serial: "ELC-2024-001"
- Type: Manufacturer
- Start: 2024-01-01
- End: 2026-01-01
- Submit
Expected Result:
- Warranty added to list
- Status: active (if within dates)
- Days remaining calculated correctly
Steps:
- Click an active warranty
- Click "File Claim"
- Fill in:
- Issue description
- Upload photos
- Submit
Expected Result:
- Claim created (status: filed)
- Can track claim progress
Steps:
- Navigate to
/project/[id]/handover - View package contents:
- As-built drawings
- Material register
- Contractor directory
- Maintenance manual
Expected Result:
- Package sections populated
- Documents downloadable
- Status progression: draft → in_progress → ready → delivered
Steps:
- Navigate to
/project/[id]/ar - On mobile device with camera
Expected Result:
- Camera activates (with permission)
- AR overlay shows furniture
- Can interact with placed items
Note: Requires WebXR-capable device. On desktop, may show compatibility warning.
Steps:
- Navigate to
/portfolios - Click "Create Portfolio"
- Fill in: name, description
- Add projects to portfolio
Expected Result:
- Portfolio created
- Projects grouped under portfolio
- Aggregate metrics shown
Steps:
- Navigate to
/developer - Click "Register App"
- Fill in:
- App name
- Redirect URIs
- Scopes
- Submit
Expected Result:
- App registered
- Client ID generated
- Client Secret shown (once)
Steps:
- Navigate to
/developer/docs
Expected Result:
- API documentation displayed
- Endpoints listed with parameters
- Code examples provided
Steps:
- Trigger a notification (e.g., create a comment on your project from another account)
- Observe the bell icon in top navigation
Expected Result:
- Bell icon shows unread count badge (red number)
- Click bell → dropdown with recent notifications
- Each notification: icon, title, message, timestamp
Steps:
- Click a notification in the dropdown
- Or click "Mark as Read" button
Expected Result:
- Notification marked as read
- Unread count decrements
- Read notification no longer has "unread" styling
Steps:
- Have multiple unread notifications
- Click "Mark All Read"
Expected Result:
- All notifications marked as read
- Unread count becomes 0
- Badge disappears
Steps:
- Navigate to
/notifications - View All tab and Unread tab
Expected Result:
- All tab shows all notifications
- Unread tab shows only unread
- "View Details" link navigates to relevant page
Steps:
- Open the app in two browsers (two different users)
- User A comments on User B's project
- Observe User B's browser
Expected Result:
- Toast popup appears on User B's screen within seconds
- Bell icon count increments
- No page refresh needed
Steps:
- Sign in with a non-admin account
- Navigate to
/admin
Expected Result:
- Access denied (redirected or error message)
- No admin content visible
Steps:
- Sign in with admin account
- Navigate to
/admin
Expected Result:
- Dashboard shows: total users, total projects, active jobs, system health
- All numbers accurate
Steps:
- Navigate to
/admin/users - View user list
- Try to disable a user account
Expected Result:
- User list displayed with search/filter
- Can enable/disable user accounts
- Disabled user cannot sign in
Steps:
- Navigate to
/admin/system - View service health checks
Expected Result:
- All services show status (up/down)
- Response times displayed
- Down services highlighted in red
Steps:
- Navigate to
/admin/jobs - View job list
Expected Result:
- Jobs listed with: type, status, user, created time
- Filter by status (pending/running/completed/failed)
- Can view job details (input/output/errors)
Steps:
- Navigate to
/dashboard/settings
Expected Result:
- Profile section with name, email, image
- Preferences section with currency, unit system, locale
- API Keys section
- Connected accounts section
Steps:
- Go to Settings → Preferences
- Change currency from USD to INR
- Save
Expected Result:
- Currency preference saved
- All financial displays across the app show ₹ instead of $
Steps:
- Change from Metric to Imperial
- Save
- Navigate to a room page
Expected Result:
- Dimensions shown in feet/inches instead of mm
- All dimensional inputs accept feet/inches
Steps:
- Go to Settings → API Keys
- Click "Add API Key"
- Select provider: OpenAI
- Enter API key:
sk-test123456789 - Save
Expected Result:
- Key stored successfully
- Only prefix shown (e.g.,
sk-te...789) - Key encrypted in database (verify: not stored as plaintext)
Steps:
- Click delete on an existing API key
- Confirm deletion
Expected Result:
- Key removed
- Design generation should show "no API key" error until new key is added
Steps:
- Create payments in different currencies
- View financial reports
Expected Result:
- Each currency symbol displayed correctly: $, ₹, €, £
- Numbers formatted per locale (e.g., 1,000.00 vs 1.000,00)
Steps:
- Create project with Metric
- Create project with Imperial
- Compare room dimension displays
Expected Result:
- Metric project: dimensions in mm (e.g., 4000 × 3500 mm)
- Imperial project: dimensions in ft/in (e.g., 13'1" × 11'6")
Steps:
- Navigate to every page via sidebar
- Verify active route highlighting
- Check breadcrumbs on nested pages
- Verify back button behavior
Expected Result:
- Sidebar highlights current page
- Breadcrumbs show correct path
- Back button returns to previous page (not a random page)
Steps:
- On a slow network (DevTools → Network → Slow 3G)
- Navigate to various pages
- Observe loading indicators
Expected Result:
- Skeleton loaders shown while content loads
- No blank/white screens
- Loading spinners for actions (button states)
- No layout shift when content loads
Steps:
- Disconnect network (DevTools → Network → Offline)
- Try to create a project
- Try to load a page
Expected Result:
- Error message shown (not a crash)
- Toast with error description
- Retry option where applicable
- No unhandled promise rejections in console
Steps:
- Check empty states on:
- Dashboard (no projects)
- Rooms (no rooms)
- Designs (no designs)
- BOM (no BOM generated)
- Marketplace (no contractors match filter)
- Notifications (no notifications)
Expected Result:
- Each shows appropriate empty state message
- Icon/illustration present
- CTA button to create/add (where applicable)
- No broken layouts
Steps:
- Trigger various actions:
- Create project → success toast
- Create room → success toast
- Upload file → success/error toast
- Generate BOM → completion toast
- Observe toast behavior
Expected Result:
- Toasts appear at consistent position (bottom)
- Auto-dismiss after 3-5 seconds
- Close button (×) works
- Multiple toasts stack properly
- Error toasts are visually distinct (red/destructive)
Steps:
- Copy a project URL (e.g.,
/project/abc123) - Paste in new tab while signed in
Expected Result:
- Page loads correctly
- No redirect to dashboard
- Correct project data shown
Steps:
- Navigate to
/project/invalid-id-12345
Expected Result:
- "Project not found" error or 404 page
- No crash
- Navigation back to dashboard available
Steps:
- Get a project ID belonging to another user
- Try to access it:
/project/[other-users-project-id]
Expected Result:
- Access denied or "Not found"
- Cannot view other user's project data
- No data leakage in API responses
Steps:
- Open the same project in two browser tabs
- In tab 1: create a room
- Switch to tab 2: check if room appears (after refresh)
- In tab 2: delete the room
- Switch to tab 1: check if room is gone (after refresh)
Expected Result:
- Data remains consistent
- No phantom data after deletion
- Refresh shows current state
Steps:
- Open DevTools → Performance tab
- Navigate to each major page:
- Dashboard
- Project overview
- Editor
- Marketplace
- Analytics
- Record load times
Expected Result:
- Pages load in under 3 seconds on fast connection
- First Contentful Paint < 1.5 seconds
- No unnecessary API calls (check Network tab)
Steps:
- Create a project with 20 rooms
- Generate designs for each room
- Navigate to design list
Expected Result:
- Page handles 20+ items without performance issues
- Scrolling remains smooth
- No memory warnings in console
Steps:
- Navigate to a project with many uploaded photos
- Scroll through photo gallery
Expected Result:
- Thumbnails load quickly
- Lazy loading works (images below viewport load on scroll)
- No broken image icons
Steps:
- Open 3D editor
- Add 20+ furniture items
- Orbit and zoom the scene
Expected Result:
- FPS stays above 30 (check stats panel if available)
- No freezing or stuttering
- Mouse interaction remains responsive
Steps:
- In every text input field, try entering:
Test in: project name, room name, comment text, site log notes
<script>alert('XSS')</script> - Submit and view the saved data
Expected Result:
- Script is NOT executed
- Text is displayed as-is (escaped) or sanitized
- No JavaScript alert popup
Steps:
- In text inputs, try:
'; DROP TABLE projects; -- - Submit and check if data is saved
Expected Result:
- Text saved as literal string
- No database errors
- No data loss (projects table intact)
Note: The app uses Drizzle ORM which should prevent SQL injection, but always verify.
Steps:
- Using DevTools Network tab, copy a tRPC request
- Modify the project ID to another user's project
- Replay the request
Expected Result:
- Request rejected (unauthorized or not found)
- Cannot access other user's data
- Cannot modify other user's data
Steps:
- Rename a
.htmlfile to.jpgand try to upload - Try to upload a file with script content
Expected Result:
- Server validates actual file content (MIME type), not just extension
- Malicious files rejected
- Uploaded files served with proper Content-Type headers
- No Content-Type sniffing (X-Content-Type-Options: nosniff)
Steps:
- Add an LLM API key
- Check the database directly (if you have access):
SELECT encryptedKey, iv, authTag FROM userApiKeys WHERE userId = '...';
Expected Result:
encryptedKeyis NOT the plaintext keyivandauthTagare populated (AES-256-GCM encryption)- API never returns the full key (only prefix)
Steps:
- Make 100 rapid API calls (script or manual)
Expected Result:
- Rate limiting kicks in (429 Too Many Requests)
- Or: requests are throttled
Steps:
- Open
/dashboardon mobile (or Chrome DevTools → Mobile view) - Check responsive layout
Expected Result:
- Project cards stack vertically (single column)
- Sidebar collapses to hamburger menu
- All buttons tappable (min 44×44px touch target)
- No horizontal scrollbar
Steps:
- Open
/marketplaceon mobile - Check filters, search, cards
Expected Result:
- Filter sidebar collapses or becomes sheet/drawer
- Search input full width
- Contractor cards single column
- Pagination buttons accessible
Steps:
- Open BOM table on mobile
- Check table display
Expected Result:
- Table horizontally scrollable
- Column headers visible
- Touch scroll works smoothly
- No text cutoff
Steps:
- Open 3D editor on mobile
Expected Result:
- Either: Viewport renders with touch controls (pinch zoom, one-finger orbit)
- Or: Clear message that editor is best on desktop
- No crash
Steps:
- Open create project dialog on mobile
- Fill in all fields
- Submit
Expected Result:
- Dialog covers full screen or adapts to mobile
- Keyboard doesn't cover input fields
- Submit button accessible
- Dropdowns work correctly on mobile
Use this checklist to track your testing progress:
- TC-1.01: Google OAuth Sign In
- TC-1.02: GitHub OAuth Sign In
- TC-1.03: Protected Route Redirect
- TC-1.04: Sign Out
- TC-2.02: Create New Project
- TC-2.04: View Project Overview
- TC-3.02: Add Room
- TC-3.05: View Room Detail
- TC-4.01: Upload Valid JPEG
- TC-4.06: Reject Oversized File
- TC-4.07: Reject Invalid File Type
- TC-4.11: Upload Without Auth
- TC-5.01: Upload Floor Plan
- TC-5.02: Digitize Floor Plan
- TC-5.04: Create Rooms from Detected
- TC-8.01: Generate Design Variant
- TC-8.04: View Design Detail
- TC-9.01: Load Editor
- TC-9.02: Place Furniture
- TC-9.03: Move Furniture
- TC-10.01: Generate BOM
- TC-10.04: BOM Export CSV
- TC-11.01: Generate Drawings
- TC-13.01: Electrical Calculation
- TC-13.02: Plumbing Calculation
- TC-13.03: HVAC Calculation
- TC-15.01: Generate Timeline
- TC-16.01: Create Change Order
- TC-17.01: Create Site Log
- TC-18.04: Create Punch List Item
- TC-19.01: Create Discussion Thread
- TC-19.02: Post Message
- TC-20.01: Generate Purchase Orders
- TC-22.01: View Payment Summary
- TC-22.02: Create Payment (Stripe)
- TC-28.01: Browse Contractors
- TC-28.02: Search Contractors
- TC-28.06: View Contractor Profile
- TC-39.01: Notification Bell
- TC-40.01: Admin Access Control
- TC-40.02: Admin Dashboard
- TC-41.01: View Settings
- TC-41.04: Add LLM API Key
- TC-CC.08: Other User's Project (security)
- TC-S.01: XSS Prevention
- TC-S.02: SQL Injection Prevention
- TC-S.03: API Authorization
- TC-S.04: File Upload Security
- TC-S.05: API Key Security
- TC-1.05: Session Persistence
- TC-1.06: Multiple Tabs
- TC-2.01: View Empty Dashboard
- TC-2.03: Imperial Units Project
- TC-2.05: Delete Project
- TC-2.06: Multiple Projects
- TC-3.01: Empty Room List
- TC-3.03: All 15 Room Types
- TC-3.04: Room Validation
- TC-3.06: Delete Room
- TC-4.02: Upload PNG
- TC-4.03: Upload WebP
- TC-4.04: Upload GIF
- TC-4.05: Upload PDF
- TC-4.09: Upload via Click
- TC-4.10: Multiple File Upload
- TC-5.03: Floor Plan Viewer Interactions
- TC-5.05: Digitize with PDF
- TC-8.02: Generate Without API Key
- TC-8.03: Multiple Variants
- TC-9.04: Rotate Furniture
- TC-9.05: Scale Furniture
- TC-9.06: Delete Furniture
- TC-9.07: Deselect Object
- TC-9.08: Change Material
- TC-9.09: Grid and Snap Controls
- TC-9.10: View Presets
- TC-9.12: Real-Time Collaboration
- TC-10.02: BOM Table Sorting
- TC-10.03: BOM Category Collapse/Expand
- TC-10.05: BOM Export Excel
- TC-10.06: BOM Export PDF
- TC-10.07: BOM Currency Display
- TC-11.02: Download DXF
- TC-11.03: Download PDF
- TC-11.04: All Drawing Types
- TC-12.01: Generate Cut List
- TC-12.02: Nesting Viewer
- TC-14.01: Run Compliance Check
- TC-15.02: View Milestones
- TC-15.03: Link Payment to Milestone
- TC-16.02: Approve Change Order
- TC-16.03: Reject Change Order
- TC-17.02: View Site Logs Timeline
- TC-18.01: Quality Checkpoints
- TC-18.02: Complete Inspection
- TC-18.03: Fail Inspection
- TC-18.05: Resolve Punch List
- TC-19.03: @Mention User
- TC-19.04: Mark Thread Resolved
- TC-19.05: Request Approval
- TC-19.06: Approve/Reject
- TC-20.02: Submit PO
- TC-20.03: Update PO Status
- TC-21.01: View Deliveries
- TC-21.02: Inspection Checklist
- TC-22.03: Payment Validation
- TC-22.04: View Invoices
- TC-23.01: Financial Report
- TC-24.01: Global Analytics
- TC-24.02: Project Analytics
- TC-25.01: Cost Prediction
- TC-25.02: Timeline Prediction
- TC-26.01: Budget Scenarios
- TC-27.01: Sustainability Report
- TC-28.03: Filter by City
- TC-28.04: Filter by Specialization
- TC-28.05: Clear All Filters
- TC-28.07: Hire Contractor
- TC-28.08: Pagination
- TC-29.01: Browse Products
- TC-29.02: Product Detail
- TC-30.01: Vendor Performance
- TC-31.01: List Offcut Material
- TC-31.02: Browse and Inquire
- TC-32.01: View Digital Twin
- TC-32.02: Add IoT Device
- TC-33.01: Maintenance Schedule
- TC-33.02: Log Maintenance
- TC-34.01: Add Warranty
- TC-34.02: File Warranty Claim
- TC-35.01: Handover Package
- TC-37.01: Create Portfolio
- TC-38.01: Register App
- TC-38.02: API Documentation
- TC-39.02: Mark Read
- TC-39.03: Mark All Read
- TC-39.04: Notification Center
- TC-39.05: Real-Time Notification
- TC-40.03: User Management
- TC-40.04: System Health
- TC-40.05: Job Queue Monitor
- TC-41.02: Change Currency
- TC-41.03: Change Unit System
- TC-41.05: Delete API Key
- TC-42.01: Multi-Currency Display
- TC-42.02: Metric vs Imperial
- TC-CC.01 to TC-CC.09: Cross-Cutting Tests
- TC-P.01 to TC-P.04: Performance Tests
- TC-M.01 to TC-M.05: Mobile Tests
- TC-6.02: Insufficient Photos
- TC-7.02: Skip Quiz Steps
- TC-8.05: All 10 Styles
- TC-8.06: All 4 Budget Tiers
- TC-9.11: Keyboard Shortcuts
- TC-9.13: Ceiling Toggle
- TC-36.01: AR Mode
- TC-S.06: Rate Limiting
- TC-M.04: 3D Editor Mobile
- Always open DevTools (F12) before testing — watch for console errors and network failures
- Test the happy path first, then try to break it with edge cases
- Take screenshots of everything you find — bugs without screenshots are hard to reproduce
- Test in incognito mode for authentication tests to avoid cached sessions
- Check the Network tab after each action to ensure API calls succeed (look for red entries)
- Try rapid clicking on buttons — does it create duplicate entries?
- Try refreshing the page during async operations (BOM generation, design generation) — does it recover gracefully?
- Test with slow network (DevTools → Network → Slow 3G) to catch loading state issues
- Test the back button after every major action
- Keep notes on which features are not yet implemented vs. actually broken
| Term | Meaning |
|---|---|
| BOM | Bill of Materials — list of everything needed to build the design |
| CNC | Computer Numerical Control — automated manufacturing |
| DXF | Drawing Exchange Format — CAD file format |
| IFC | Industry Foundation Classes — BIM file format |
| MEP | Mechanical, Electrical, Plumbing |
| NEC | National Electrical Code (US standard) |
| IPC | International Plumbing Code |
| ASHRAE | American Society of Heating, Refrigerating & Air-Conditioning Engineers |
| CRDT | Conflict-free Replicated Data Type — used for real-time collaboration |
| Y.js | JavaScript CRDT library for real-time editing |
| tRPC | TypeScript Remote Procedure Call — type-safe API framework |
| OAuth | Open Authorization — sign-in via Google/GitHub |
| JWT | JSON Web Token — session authentication token |
| VLM | Vision Language Model — AI model that understands images |
| LLM | Large Language Model — AI model for text generation |
| pgvector | PostgreSQL extension for vector similarity search |
Total test cases: 150+ Estimated testing time: 3-5 full working days for complete coverage Priority P0 tests: ~40 cases (complete in 1 day) Priority P1 tests: ~90 cases (complete in 2-3 days) Priority P2 tests: ~20 cases (complete in 0.5-1 day)
Remember: If something feels wrong, it probably is. Report it. It's better to report a non-bug than to miss a real one.