Documateo ยท The Bible
// 58 file tools. 72% run on your device. Real qpdf, real pricing, real domain.
All saved โœ“
๐Ÿงญ How to use this tracker
This file is self-contained โ€” no login, no cloud dependency. Everything lives in your browser, with backup/restore to keep it safe across devices.
1
Navigate with the sidebar โ€” grouped by System Map, Product Pillars, Platform Operations, Security/QA, Growth Timeline, and Marketing/Business.
2
Click any task to mark it done (turns green โœ“). Click again to unmark.
3
Growth Timeline has horizon tabs โ€” 1 Week, 1 Month, 3/6/12 Months, 2โ€“5 Years โ€” each with its own focus and checklist.
4
Press "๐Ÿ’พ Save Progress" (or Ctrl+S) โ€” saves to browser localStorage. Progress persists between sessions.
5
Use "โฌ‡ Backup / Restore" to download a .json file regularly. Re-import on any device to sync progress โ€” treat this like a save file.
Tasks Done
0
of 0 total tracked tasks
Overall Progress
0%
Across every pillar
Current Phase
Phase 0
Stabilize & De-Risk
Tools Live
58 / 62
30 PDF ยท 20 Image ยท 4 Video ยท 4 Utility, 4 stubs left
Loadingโ€ฆ0%
๐ŸŽฏ Today's Mission
Loadingโ€ฆ
๐Ÿ’ธ AI Spend (month)$0
โค๏ธ Platform Healthโ€”
๐Ÿšฆ Release Ready0 / 4
๐Ÿ” Critical Security Closed0 / 0
๐Ÿ•“ Recent Activity
  • No activity yet โ€” tick a task to get started.
๐ŸŽฏ
The honest position, restated: the vision doc's own baseline audit (19 Jul 2026) flagged Protect/Unlock PDF as "registered but broken" โ€” a real bug someone could click into and fail on. That's fixed now, and fixed well: a dedicated pdf-crypto container running native qpdf, not the WASM path the doc suggested, because shipping a large WASM bundle to every visitor for a tool most won't use was the wrong tradeoff. Domain and pricing risks are also resolved. What's genuinely still open: zero production monitoring, a silent failed-payment email gap, and flat (unweighted) per-tool credit costs.
โœ… Shipped Since the 19 Jul Baseline โ€” Verified From Code
  • Protect/Unlock PDF fixed via a dedicated pdf-crypto container (native qpdf, real AES-256) โ€” tools.ts now correctly lists both as engine:"container", not the broken browser path.
  • Domain unified to documateo.com everywhere (metadataBase, sitemap, robots, OAuth redirect) โ€” confirmed live via Google's own index.
  • Pricing moved off a hardcoded "EDIT BEFORE GOING LIVE" placeholder into an admin-editable pricing_config D1 table, seeded with real, dated numbers (matched to iLovePDF's confirmed-live $9/mo).
  • 10 of the original 14 stub tools shipped: Extract Text, PDF Info, Remove Metadata, Add Text, Stamp, Flatten, Scan to PDF, Batch Processing, Bulk Resize, Aspect Crop. Only 4 remain.
  • Two-role admin RBAC (support/super_admin) with a second-factor admin-panel secret and its own attempt-tracking table.
  • Per-account login lockout on top of per-IP rate limiting โ€” closes a real credential-stuffing gap.
  • Real-time job progress percent for video jobs (ffmpeg -progress pipe), correctly NULL (not faked) for containers that can't report it.
  • Invoice system with GST-ready template, correctly showing 0% until the registration flag flips โ€” no retroactive risk.
๐Ÿ“ The Core Question
๐Ÿ“
Before building any new feature: is this genuinely new capability, or does the infrastructure already exist and just need wiring? Extract Audio from Video is the clearest example โ€” the ffmpeg container it needs is already deployed and running 4 other video tools.
Documateo โ”‚ โ”œโ”€โ”€ Core (auth, domain unified, D1/R2/KV โ€” DONE) โ”œโ”€โ”€ PDF Tools (30/30 โ€” Protect/Unlock fixed via container โ€” DONE) โ”œโ”€โ”€ Image Tools (20/20 โ€” DONE) โ”œโ”€โ”€ Video Tools (4/5 โ€” Extract Audio stub, infra exists โ€” MOSTLY DONE) โ”œโ”€โ”€ Utility Tools (4/4 โ€” DONE) โ”œโ”€โ”€ Containers (4 images: video, office, pdf-repair, pdf-crypto โ€” DONE) โ”œโ”€โ”€ Billing (pricing now real + admin-editable โ€” MOSTLY DONE) โ”œโ”€โ”€ Admin Console (2-role RBAC, refunds, discounts โ€” DONE) โ”œโ”€โ”€ Job Lifecycle (queues, DLQ, cron sweep, progress โ€” DONE) โ”œโ”€โ”€ Marketing Site (69 posts, sitemap, category pages โ€” MOSTLY DONE) โ”‚ โ””โ”€โ”€ Monitoring (Sentry/PostHog) โ€” NOT WIRED, still invisible โ””โ”€โ”€ highest-priority open item on the whole platform
๐Ÿงญ The Strategic Shift
Documateo wins on speed, privacy, and honesty about limits โ€” not tool count.
72% of tools run 100% client-side โ€” the file never leaves the device. That's a genuine, technically-true claim none of iLovePDF, Smallpdf, or Sejda can make across their whole catalog. The 3-year north star: documateo.com ranks above ilovepdf.com for 15+ of the highest-volume tool keywords (merge pdf, compress pdf, pdf to word) in India first, then global English-speaking markets โ€” profitable on pay-per-use, never requiring venture funding.
โš ๏ธ The Open Question This Tracker Answers
โ“
The vision doc's own baseline audit is dated 19 Jul 2026 โ€” the code has moved substantially since. Its #1 flagged bug (Protect/Unlock PDF broken) is fixed, and fixed with a better solution than the doc itself proposed. Its #1 flagged domain risk is resolved. Its placeholder-pricing risk is resolved. What genuinely remains open โ€” zero monitoring, a silent failed-payment email gap, flat per-tool credit costs โ€” is now precisely scoped instead of buried under fixed items. Treat this tracker as current; treat the vision doc as historical baseline.
๐Ÿ“Š Wrong Metric vs Correct Metric
Track outcomes, not activity. A signed-in heavy-tool job or a blog post that actually drives tool usage is the real unit of value.
Instead of trackingTrack thisWhy it matters
Total tool usesContainer/AI tool uses by signed-in vs. anonymous usersAnonymous heavy-tool credits are a real, currently-untracked cost
SignupsSignups who complete a 2nd heavy-tool job in the same weekOne-and-done anonymous usage never becomes a customer relationship
Blog trafficBlog โ†’ tool page click-through, by post69 posts exist; knowing which drive tool usage tells you what to write more of
โ€”Real cost-per-job vs. credits_charged, by tooltool_credit_costs is seeded flat at 1 โ€” this is the data needed to fix that
โ€”payment.failed โ†’ recovery rate once the missing email is builtCurrently 0%, because no email fires โ€” a real, fixable leak
๐Ÿท๏ธ Revenue Model โ€” Real Numbers, Admin-Editable
pricing_config (D1, migration 0006) replaced the hardcoded "EDIT BEFORE GOING LIVE" placeholder. The โ‚น699/mo number is unchanged but now deliberate โ€” matched to iLovePDF's real, confirmed-live $9/mo, not guessed.
TierAccessPrice (INR)Price (USD)
FreeAll 58 tools; 72% unlimited forever; heavy tools on a daily anonymous credit allowanceโ‚น0$0
Pro60 credits/mo for container/AI toolsโ‚น699/mo ยท โ‚น5,999/yr$9/mo ยท $60/yr
Business300 credits/mo, ~2.86ร— Pro ratioโ‚น1,999/mo ยท โ‚น17,999/yr$25/mo ยท $170/yr
๐Ÿ“
Standing rule for every decision: if a system could be reused across PDF/Image/Video/Utility tools, it belongs in Core. If it's specific to one tool's logic, it lives in that tool's own engine file.
1
No leaking money โ€” requirePlan.ts has no bypass path, ever
Every container/AI job is gated. No "free trial" feature, referral bonus, or admin override skips this without being logged and capped.
2
Browser-first stays free forever
The 72% client-side tools cost nothing to run and must never be paywalled, rate-limited by plan, or degraded to push upgrades. This is the core brand promise, not a feature.
3
No stale URLs โ€” a stub, never a 404, never a silent redirect
Every V1 URL either has a real tool or a ToolNotYetAvailable stub. SEO equity is never dropped silently.
4
A registered-but-broken tool is worse than an honest stub
The Protect/Unlock PDF incident โ€” listed as shipped, actually threw on every call โ€” is the direct lesson. Never mark a tool live in tools.ts until it genuinely works end-to-end.
5
One source of truth per concern
Tool metadata lives only in tools.ts. Pricing lives only in pricing_config. Extend this pattern to every new subsystem โ€” no hardcoded prices, no duplicated tool lists in the frontend.
6
Don't force WASM if it visibly degrades output quality
The pdf-crypto container is this principle applied correctly โ€” a native qpdf binary server-side beats a large WASM bundle shipped to every visitor for a tool most won't use. Cost-cutting never wins over a broken output.
7
Ship reversible, not risky
Prefer feature flags (FEATURE_FLAGS KV, platform_settings kill switches) over big-bang cutovers. Anything touching money or auth ships behind a flag with a kill switch.
8
A schema migration should not silently change behavior on deploy day
tool_credit_costs was seeded flat at 1 specifically to avoid repricing anyone the moment it shipped. Weighting is now possible, applying it is a deliberate follow-up decision, not a side effect.
9
No task is "done" because code exists
It's done when it's deployed, tested, and verified against the money firewall and mobile viewport. This applies to this tracker's own checkmarks too.
10
Radical honesty about what's local vs. server-side is the actual product
"This file never leaves your device" or "deleted within 2 hours" โ€” stated plainly on every tool page. This is differentiation, not a privacy-policy footnote.
Confirmed live: email+password, email verification, password reset, magic link, Google OAuth, session cookies. documateo.com is the single canonical domain everywhere โ€” the vision doc's top Phase 0 risk (two domains in one codebase) is resolved.
๐Ÿ” Identity & Authentication
Email+password, email verification, password reset, magic link, Google OAuth
CRITICAL
Session cookies, KV-cached for fast edge reads
CRITICAL
Per-account login lockout on top of per-IP rate limiting (migration 0012)
CRITICAL
๐ŸŒ Domain Strategy
documateo.com unified everywhere โ€” metadataBase, sitemap, robots, OAuth redirect
CRITICALConfirmed live via Google's own index
Old appv2/apiv2 domains 301 cleanly if any traffic still hits them
MEDIUM
๐Ÿ—„๏ธ Storage & Config
D1 schema โ€” 13 migrations applied, users/jobs/pricing_config/tool_credit_costs and more
CRITICAL
R2 buckets (uploads/outputs) + KV (rate limits, session cache, feature flags)
HIGH
R2 2-hour lifecycle rule confirmed live via CLI/screenshot, not just documented
HIGHNamed as needing live confirmation in the vision doc โ€” not yet verified here
๐Ÿชœ The Spine
๐Ÿ”ง Support Modules (parallel, non-blocking)
Uses These Systems
๐Ÿ“„ Core PDF Editing โ€” Browser/pdf-lib
Merge, Split, Rotate, Watermark, Organize/Reorder, Delete Pages, Add Page Numbers, Crop โ€” all pdf-lib, pure browser
CRITICAL
Image to PDF โ€” pdf-lib + native Canvas composition
HIGH
Extract Text, PDF Info, Remove Metadata โ€” shipped since the 19 Jul baseline
HIGH
Add Text to PDF, Stamp PDF โ€” same overlay pattern as Watermark, shipped since baseline
HIGH
Flatten PDF (form flattening), Scan to PDF (Canvas capture) โ€” shipped since baseline
MEDIUM
Batch PDF Processing โ€” client orchestration of existing browser tools, shipped, doubles as the foundation for tool chaining
MEDIUM
๐Ÿ”’ Protect / Unlock โ€” Fixed via Container
Protect PDF (add password) โ€” pdf-crypto container, native qpdf, real AES-256
CRITICALWas "registered but throws on every call" per the 19 Jul baseline โ€” fixed
Unlock PDF (remove known password) โ€” same container, same fix
CRITICAL
๐Ÿ“ฆ Container/AI-Backed PDF Tools
Compress PDF (mupdf-wasm, routes >25MB server-side), PDF to JPG/PNG, Extract Images from PDF
HIGH
Repair PDF (qpdf/mutool container), HTML to PDF (Browser Rendering API), PDF to Word/PPT/Excel, Office to PDF (LibreOffice), PDF to PDF/A, OCR PDF
CRITICAL
๐Ÿšง Remaining for This Pillar
Redact PDF โ€” visual black-box only until content-stream-level removal is verified; never ship a "permanent" claim until true
HIGHSecurity-sensitive stub, last one blocking on a real product decision, not just engineering
PDF to Excel returns Markdown tables, not real .xlsx โ€” known quality gap flagged directly in tools.ts comments
MEDIUM
Uses These Systems
๐Ÿ–ผ๏ธ Browser-Native Tools
Compress (jsquash), Resize (pica), Crop, Convert (JPG/PNG/WebP/BMP) โ€” all pure browser
CRITICAL
Watermark, Rotate & Flip, Grayscale/B&W, Circle/Shape Crop โ€” Canvas API
HIGH
EXIF viewer + remover โ€” privacy-critical: strips GPS data client-side, never reaches a server
HIGH
Merge Images (collage), GIF Maker, GIF to Images (extract frames), Add Text/Meme tool
MEDIUM
Brightness/Contrast/Color adjust โ€” WebGL shader for real-time preview
MEDIUM
HEIC to JPG โ€” libheif-wasm, common enough (iPhone photos) to justify dedicated WASM
HIGH
Bulk Resize (multi-file extension of existing resize.ts), Aspect Ratio Crop โ€” shipped since baseline
HIGH
๐Ÿค– AI-Backed Tools
Remove Background, Image Upscaler โ€” Cloudflare Images / Workers AI, genuinely need a trained model
HIGH
Uses These Systems
๐ŸŽฌ Live Tools
Compress Video โ€” ffmpeg container
CRITICAL
Convert Video (MP4/WebM/MOV) โ€” ffmpeg container
HIGH
Video to GIF โ€” ffmpeg frame extraction + palette optimization
MEDIUM
Trim/Cut Video โ€” hybrid: instant client-side preview (MediaSource API), server-side does the real encode
HIGH
๐Ÿšง Remaining
Extract Audio from Video โ€” the ffmpeg container it needs is already deployed, one of the lowest-effort remaining stubs
HIGHHighest-leverage close on the whole stub list โ€” infra already exists
๐Ÿงฐ Coverage
QR Code Generator โ€” pure JS (qrcode)
MEDIUM
Password Generator โ€” Web Crypto API (crypto.getRandomValues), never server-side, full stop
HIGH
File Hash Generator โ€” SHA family native Web Crypto, MD5 via small JS lib
MEDIUM
Create/Extract ZIP โ€” fflate, handles GB-scale zips client-side with streaming
MEDIUM
Why containers instead of "a VPS": no idle cost, no OS patching, no SSH surface โ€” Cloudflare manages the runtime. A 12-second video compress costs ~12 seconds of compute, not a slice of a $20/month server.
๐Ÿ“ฆ The 4 Images
video โ€” ffmpeg, powers Compress/Convert/Video-to-GIF/Trim-export
CRITICAL
office โ€” LibreOffice headless, powers PDFโ†”Word/PPT/Excel/Office-to-PDF
CRITICAL
pdf-repair โ€” qpdf/mutool, powers Repair PDF for genuinely corrupted files
HIGH
pdf-crypto โ€” qpdf, powers Protect/Unlock PDF, built after the vision doc baseline specifically to fix the broken-tool incident
CRITICALThe single most important container addition since baseline
๐Ÿ›ก๏ธ Container Security Posture
Read-only rootfs, no outbound network, ephemeral, auto-destroyed after job โ€” confirmed across all 4 Dockerfiles
CRITICAL
Cold-start latency (sleepAfter: "1m") load-tested under real traffic, not just dev
HIGHNamed in the vision doc as needing verification โ€” not yet confirmed here
๐Ÿค– Live Today
OCR PDF โ€” Cloudflare Workers AI, pay-per-page, zero idle cost
HIGH
PDF to Excel table detection โ€” toMarkdown(), known limitation: returns Markdown not real .xlsx
MEDIUM
๐Ÿšง The Real Build Ahead
Ask AI About a PDF โ€” needs its own persistent-chat UX pattern, not the standard AsyncToolShell; the seed of Phase 6's whole AI product line
HIGHDon't build this as a throwaway โ€” it's the foundation for Translate PDF and beyond
๐Ÿ’ณ Core Billing โœ“ Live
Razorpay prepaid-pass flow โ€” order-based, not recurring subscription
CRITICAL
Webhook idempotency โ€” Razorpay event ID dedup in D1, survives retries safely
CRITICAL
pricing_config D1 table โ€” replaced the hardcoded "EDIT BEFORE GOING LIVE" placeholder, admin-editable, no redeploy needed
CRITICALReal, dated numbers: matched to iLovePDF's confirmed-live $9/mo
tool_credit_costs table โ€” makes per-tool cost-accurate credit weighting possible (migration 0006)
HIGH
GST-ready billing_settings + invoice system โ€” 0% shown correctly until registration flag flips, zero retroactive risk
HIGH
Admin refund tool
HIGH
๐Ÿšง Remaining
RAZORPAY_WEBHOOK_SECRET verified actually SET in production โ€” code reads it correctly, but this is a deployment fact no source read can confirm
HIGH
Failed-payment recovery email โ€” payment.failed webhook updates D1 status but never calls the email service, confirmed by direct code read
HIGHReal, currently-silent revenue leak
๐Ÿ”’
Golden Rule โ€” reconfirmed: requirePlan.ts hard-blocks anonymous/free users from ever reaching container/AI cost, no bypass path. Every new heavy-tool route inherits this scrutiny by default โ€” verify it explicitly on each one anyway.
๐ŸŽ›๏ธ Coverage
Admin routes require session.isAdmin at the mount point โ€” one choke point, not scattered per-route checks
CRITICAL
Two-role split โ€” support (day-to-day refunds/discounts/lookups) vs super_admin (pricing, credit costs, GST, promoting other admins)
HIGH
Second-factor admin-panel secret with its own attempt-tracking table (admin_secret_attempts)
HIGH
User management โ€” view/search/suspend, cascading effects on passes/jobs
HIGH
Refund tool wired to Razorpay's real refund API, not just a DB status flip
HIGH
Discount code management, platform_settings kill switches (3 independent switches, correctly scoped)
HIGH
๐Ÿšง Remaining
Discount code max-redemption-count and expiry field confirmed in schema (0005), not assumed
MEDIUM
โš™๏ธ Coverage
jobs-container, jobs-ai, jobs-cleanup, jobs-dlq queues โ€” 3-retry then alert + auto-refund
CRITICAL
Hourly cron sweep โ€” expired jobs, orphaned stuck jobs, expired passes
HIGH
No credit charged before a job is confirmed queued โ€” verified order of operations in routes/jobs.ts
CRITICAL
Real-time progress_percent for video jobs (ffmpeg -progress pipe), NULL correctly for office/repair/crypto
HIGH
Container callback authenticated with CONTAINER_CALLBACK_SECRET, not a user session โ€” correct trust boundary
HIGH
๐Ÿ  Core Pages โœ“ Live
Homepage, pricing, about, FAQ, legal pages
CRITICAL
69 blog posts live
HIGH
Category landing pages โ€” PDF/Image/Video/Utilities
HIGH
Static sitemap.xml + robots.ts, aligned to the single documateo.com domain
CRITICAL
58 tool pages confirmed matching tools.ts exactly โ€” verified against the live site's own "58 tools, 72% local" claim
HIGH
/developers and /status pages live per the site footer
MEDIUM
๐Ÿšง Remaining
/vs/ilovepdf, /vs/smallpdf, /vs/sejda comparison pages โ€” factual, evenhanded, competitor pricing sourced and dated
HIGH
Per-tool "how it works" trust block on every tool page โ€” "never leaves your device" vs "deleted within 2 hours"
HIGH
๐Ÿ”Œ Coverage
/developers page exists per the site footer
MEDIUM
๐Ÿšง Genuinely Not Started
API-key auth layer alongside existing session auth on the same Worker routes
MEDIUM
Per-API-key rate limiting, usage-based billing โ€” evaluate Stripe for a USD-default developer audience
LOW
โš ๏ธ
The platform's #1 named gap: zero production monitoring. No Sentry, PostHog, or Analytics Engine found anywhere โ€” a production error, including a failed payment or a crashed container job, is currently invisible until a user reports it manually.
๐ŸŽฏ
The bar: a tool is never registered as shipped in tools.ts until it genuinely works end-to-end. The Protect/Unlock PDF incident โ€” listed live, actually throwing on every call โ€” is the direct lesson: a registered-but-broken tool is worse than an honest stub.
๐Ÿ“‹ Tracked Tasks
Client-side tool chaining โ€” "compress then watermark" as a saved pipeline, zero new infra
HIGH
Job history at /account/history โ€” confirm wired to real data, not a placeholder
MEDIUM
Drag-and-drop multi-tool dashboard
MEDIUM
Keyboard shortcuts + power-user mode
LOW
Multi-region D1 read replicas โ€” once traffic outside India grows meaningfully
LOW
Desktop app (Tauri) โ€” reuses the same WASM engines already built
LOW
Browser extension for quick-access tools
LOW
โœ… Marketing Action Checklist
โœ… SEO Action Checklist
๐Ÿ’ณ Plan Tiers
โœ… Business Action Checklist
๐Ÿ“
The core question: could more than one tool category (PDF, Image, Video, Utility) reuse this in the next 12 months? YES โ†’ Build in Core. NO โ†’ Build inside that category's own engine.
Feature Ownership
FeatureOwnerLocationNotes
AuthenticationCoreapps/api/src/routes/auth.tsEvery tool category imports this
PricingCorelib/pricing.ts + pricing_config tableSingle source of truth since migration 0006, admin-editable
Tool registryCorepackages/tool-config/src/tools.tsgetToolByPath() is the ONLY sanctioned URLโ†’tool lookup โ€” never match on slug directly in routing code
File validation (magic-byte, zip-bomb, size cap)Coremiddleware/fileValidation.tsRuns on every upload regardless of tool category
requirePlan.ts money firewallCoreapps/api/srcThe single enforcement point for the golden rule โ€” no bypass path
PDF engines (pdf-lib, mupdf-wasm)PDF Toolslib/engines/browser/pdf/Category-specific
pdf-crypto containerPDF Toolsapps/workers-containers/pdf-cryptoBuilt specifically for Protect/Unlock, not reused elsewhere
Image codecs (jsquash, pica)Image Toolslib/engines/browser/image/Category-specific
ffmpeg containerVideo Toolsapps/workers-containers/videoPowers all 5 video tools including the pending Extract Audio
Job queue + DLQCore (Jobs)routes/jobs.ts + queue consumersShared across container/AI tools from any category
โš ๏ธ
If you find yourself about to build one of these: stop, re-read the Guiding Principles, and ask if there's a simpler path.
Title
Severity
Est. hours
Decision
Reason
Alternatives considered
Current Focus
Blockers
Next 3 Actions
Decisions Made (free-form)
Open Questions
Abandoned / Deprioritized
Ideas Backlog