← All technical documents

CARULY / TECHNICAL REPORT

Caruly — Project Inventory

Source files, persistent data, endpoints, and implemented versus pending features.

Updated: September 13, 2026
Scope: source-based prototype snapshot
Code baseline: d23f62e plus this local documentation change
5SQLite tables
7Index entries
5Runtime / utility JS files
2JS test files

Source snapshot counts; categories measure different things and are not added together.

1. Source Inventory

Back to contents ↑

index.html: marketing page, forms, estimate, verification modal, listing review, uploads, damage report, self-inspection, returning dashboard, and navigation.
server.js: Node HTTP entry point and API routing.
storage.js: SQLite schema, ownership, photos, draft state, inspection/damage storage, session progress, backups.
inspection.js: inspection option schema and server-side validation.
tech.js: curated technical library, previews, downloads, content-type and path restrictions.
tech-docs/manifest.json: document metadata; tech-docs/*.txt: six documentation files.
storage.test.js and tech.test.js: automated storage/API/library checks.
backup.js: manual backup command. package.json: runtime requirement and npm commands.
render.yaml: service and persistent-disk declaration. .env.example: configuration examples. .gitignore: excludes private data and local configuration. README.md: operator setup.

2. Persistent Data (Not Repository Content)

Back to contents ↑

caruly.sqlite and SQLite WAL/SHM sidecars; photos/ with UUID filenames; backups/ with daily SQLite snapshots. Original upload names are metadata only. Deleted photos are soft-deleted and retained temporarily for backup consistency. Technical documents live in the repository, separate from this data.

3. Api Surface

Back to contents ↑

GET /health: health check.
POST /api/draft and GET /api/draft: own listing details.
GET /api/session: returning demo-session summary.
POST /api/session/verify-demo: fixed-code demo verification.
GET /api/photos, POST /api/photos/slot/:slot, GET/DELETE /api/photos/:id: own photos.
GET/PUT /api/damages; POST /api/damages/complete: damage state and gate.
GET/PUT /api/inspection; PUT /api/inspection/complete: inspection state and gate.
GET /tech: library. GET /tech/view/:id: preview. GET /tech/files/:id: original; ?download=1 requests attachment.

4. Implemented

Back to contents ↑

Persistence for one draft per browser token; image uploads; conditional damage/inspection requirements; same-browser return; draft isolation; backups; curated technical documents.

5. Pending

Back to contents ↑

Production account system and cross-device sessions; multiple vehicles; real offers and auctions; seller document storage; price confirmation; functioning referral program. The sample auction date is fixed and the countdown reports when it has passed. The Tech library is a repository-managed collection, not a user-facing document upload console.

6. Exact Counts And Counting Rules

Back to contents ↑

Target tree after this documentation addition: five top-level application/utility JavaScript files (server.js, storage.js, inspection.js, backup.js, tech.js), two top-level JavaScript test files, one application HTML file with inline browser code, six portable HTML technical reports and six corresponding TXT sources. Excludes dependencies, temporary scripts and data. There are zero Python application files and zero PostgreSQL database objects in this project.
SQLite schema: five application tables, seven index entries, zero application triggers and zero stored procedures. SQLite does not provide PostgreSQL-style stored procedure objects. These counts were verified on an isolated database initialized from the source; they are not a live production catalog query.

7. Index Catalog

Back to contents ↑

photos_owner: explicitly declared secondary index on photos(draft_id, deleted_at).
sqlite_autoindex_drafts_1: primary-key index; sqlite_autoindex_drafts_2: unique token-hash index.
sqlite_autoindex_photos_1, sqlite_autoindex_damage_reports_1, sqlite_autoindex_inspections_1, sqlite_autoindex_verified_drafts_1: primary-key indexes.
All primary keys are TEXT, so the five primary keys have index entries. Total: five primary-key indexes + one additional unique index + one secondary index = seven. Counts describe objects, not storage consumption.

8. Sources And Maintenance

Back to contents ↑

Prepared from the Caruly source tree and recorded development work on September 13, 2026. Reference report structure supplied by the owner. Update this snapshot when routes, schema, security, or deployment behavior changes. Do not copy unrelated project findings into this report.