FivoTools
Development Master Plan
এই file FivoTools-এর long-term technical source of truth। Public tools fast, accessible, SEO-visible এবং browser-local থাকবে; dynamic blog/guides/CMS আলাদা SSR boundary-তে চলবে; আর AI বা human developer প্রতিটি change একই architecture, UI/UX system, validation, testing এবং release contract অনুসরণ করবে। Current progress এই file-এ নয়—plan.md-এ track হবে।
AI coding agent এই file কীভাবে ব্যবহার করবে
Mandatory read order
AGENTS.md— operating rules and prohibited behavior.plan.md— actual current phase, completed work, active next task.FivoTools_Development_Master_Plan_2026.html— architecture, UI/UX and relevant tool blueprint.- Marketing plan only when route, pillar, static content, SEO or AdSense layout is involved.
- Inspect the current repository before deciding what is missing.
Task protocol
- Identify the smallest complete scope.
- List affected files and existing patterns before editing.
- Implement engine/tests before UI for logic-heavy tools.
- Preserve routes, registries, privacy and architecture.
- Run relevant checks plus build.
- Report changed files, checks run and anything unverified.
AI must never
- Rewrite the stack, URLs, pillar IDs, tool order or privacy model without explicit owner instruction.
- Create TypeScript source files;
tsconfig.jsonexists only for Astro/editor/checkJs tooling. - Make a public tool depend on Supabase or a paid API.
- Put formulas inside JSX handlers or duplicate them in UI code.
- Add random libraries, global CSS frameworks or a second UI framework.
- Invent current rates, legal eligibility, ratings, reviews, sources or test results.
- Mass-generate several tools in one change before the reference pattern is stable.
- Refactor unrelated files “for cleanliness”.
Required completion report
Summary:
Files changed:
Behavior implemented:
Tests/checks run:
Production/build status:
Assumptions or unverified items:
No unrelated changes: Yes/NoWhat is fixed and what each root file controls
| File | Authority | Update cadence |
|---|---|---|
AGENTS.md | How AI/humans inspect, edit, test and report. | Rare; process changes only. |
plan.md | Current phase, completed items, next task, blockers and short roadmap. | After every meaningful milestone. |
FivoTools_Development_Master_Plan_2026.html | Technical architecture, UI/UX, data contracts, 35 tool blueprints and release rules. | Only for approved architecture/product changes. |
FivoTools_Final_Marketing_SEO_AdSense_Project_Plan_2026.html | Tool order, pillar publishing, content, SEO, AdSense and growth decisions. | Quarterly/data-led updates. |
Locked stack
Astro + Preact islands + JavaScript/JSDoc + Node adapter + Supabase for CMS/auth/contact.
Locked portfolio
35 tools in four phases. Background Remover/ONNX is not part of the portfolio.
Locked privacy
Public calculations/files remain client-side. No mandatory public account or silent uploads.
plan.md-এ.One Astro project, static by default, SSR only where data must be live
| Area | Rendering | Data / behavior | Rebuild? |
|---|---|---|---|
| Home, All Tools, published pillars | SSG | Registries + static content | Source change only |
| All tool pages | SSG + client island | Static content + local engine | Tool/content change |
| Trust/legal pages | SSG | Repository content | Content change |
| Blog/guides | SSR / prerender=false | Published Supabase content rendered to full HTML | No for content edits |
| Backend/CMS | SSR + auth + noindex | Supabase session/RLS | No for DB changes |
| Contact/error reports | Server endpoints | Validated writes + anti-abuse | No |
| Sitemaps | Static tools/pages + dynamic content sitemap | Registries + published CMS rows | Mixed |
Astro baseline
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
import preact from '@astrojs/preact';
import sitemap from '@astrojs/sitemap';
import { loadEnv } from 'vite';
const env = loadEnv(process.env.NODE_ENV ?? 'development', process.cwd(), '');
export default defineConfig({
site: env.PUBLIC_SITE_URL,
output: 'static',
adapter: node({ mode: 'standalone' }),
integrations: [preact(), sitemap()],
});
// Only live routes/endpoints:
export const prerender = false;Direct tool route wrapper
---
import ToolPage from '../../layouts/ToolPage.astro';
import Tool from '../../features/tools/time-card/Tool.jsx';
import Content from '../../features/tools/time-card/Content.astro';
import config from '../../features/tools/time-card/config.js';
---
<ToolPage config={config}>
<Tool slot="tool" client:load />
<Content slot="content" />
</ToolPage>Clean structure for 35–100+ tools
fivotools/
├── AGENTS.md
├── plan.md
├── FivoTools_Development_Master_Plan_2026.html
├── FivoTools_Final_Marketing_SEO_AdSense_Project_Plan_2026.html
├── package.json
├── package-lock.json
├── astro.config.mjs
├── tsconfig.json # required Astro/editor tooling; no TS source
├── eslint.config.js
├── .env.example
├── app.js # only if Passenger proof requires it
├── THIRD_PARTY_NOTICES.md
│
├── scripts/
│ ├── scaffold-tool.mjs
│ ├── verify-registry.mjs
│ ├── verify-routes.mjs
│ └── verify-content.mjs
│
├── src/
│ ├── components/
│ │ ├── layout/ navigation/ ui/ forms/ results/ seo/ tool/
│ ├── features/tools/<tool-id>/
│ │ ├── config.js
│ │ ├── engine.js
│ │ ├── validation.js
│ │ ├── fixtures.js
│ │ ├── engine.test.js
│ │ ├── Tool.jsx
│ │ └── Content.astro
│ ├── content/pillars/
│ ├── data/
│ │ ├── tools.registry.js
│ │ ├── categories.registry.js
│ │ └── rates/irs-mileage.js
│ ├── lib/
│ │ ├── time/ money/ units/ geometry/ materials/
│ │ ├── image/ pdf/ documents/ validation/
│ │ ├── analytics/ seo/ supabase/
│ ├── layouts/
│ │ ├── BaseLayout.astro ToolPage.astro PillarPage.astro
│ │ ├── ArticlePage.astro BackendLayout.astro
│ ├── pages/
│ │ ├── tools/ categories/ guides/ blog/ backend/ api/
│ │ └── index.astro all-tools.astro 404.astro trust pages
│ ├── styles/
│ │ ├── tokens.css global.css forms.css tool.css utilities.css
│ └── middleware.js
│
├── supabase/migrations/
├── public/favicon/ icons/ static-assets/
└── tests/e2e/ fixtures/tsconfig.json
{
"extends": "astro/tsconfigs/base",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"jsx": "preserve",
"jsxImportSource": "preact",
"baseUrl": ".",
"paths": { "@/*": ["src/*"] }
},
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist", "node_modules"]
}Required scripts
"dev": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"check": "astro check",
"lint": "eslint .",
"test": "vitest run",
"test:watch": "vitest",
"test:e2e": "playwright test",
"verify": "npm run lint && npm test && npm run build"Environment contract
PUBLIC_SITE_URL=https://www.fivotools.com
PUBLIC_SUPABASE_URL=
PUBLIC_SUPABASE_PUBLISHABLE_KEY=
# Server-only and only if a narrow privileged job truly needs it:
SUPABASE_SECRET_KEY=- Commit
.env.example, never secrets. PUBLIC_*can enter the browser; secret keys cannot.package-lock.jsonis mandatory.- Current 2026 Node baseline: package engines should accept tested Node 22/24; revisit before runtime EOL.
Metadata is centralized; hydrated components are not dynamically routed
Tool registry contract
{
id: 'time-card',
name: 'Time Card & Work Hours Calculator',
slug: '/tools/time-card-calculator/',
categoryId: 'work-pay',
phase: 'launch',
status: 'published',
related: ['pay-raise', 'salary-hourly'],
maintenanceClass: 'formula-stable',
reviewedAt: '2026-08-26'
}Category registry contract
{
id: 'work-pay',
name: 'Work & Pay Tools',
slug: '/categories/work-pay/',
status: 'published', // planned | published | archived
toolIds: ['time-card', 'pay-raise', ...],
reviewedAt: '2026-08-26'
}| ID | Pillar route | Initial publishing rule | Tools |
|---|---|---|---|
work-pay | Work & Pay Tools/categories/work-pay/ | published with first 10 | 1, 2, 9, 11, 17 |
roofing-construction | Roofing & Construction Tools/categories/roofing-construction/ | published with first 10 | 3, 4, 5, 6, 8, 13 |
home-improvement | Home Improvement Tools/categories/home-improvement/ | publish after enough depth | 10, 14, 15, 16 |
business | Business Tools/categories/business/ | publish during growth | 7, 18, 19, 20, 24 |
image-tools | Image Tools/categories/image-tools/ | publish when 2+ image tools live | 12, 21, 22, 23 |
pdf-tools | PDF Tools/categories/pdf-tools/ | publish after meaningful PDF cluster | 25, 26, 27, 28, 30, 31, 33, 34, 35 |
career-documents | Career & Document Tools/categories/career-documents/ | publish when resume + cover letter live | 29, 32 |
- Tool URL is stable and independent from category slug.
- Only published substantive pillar routes enter Home navigation and static sitemap.
- If a tool’s pillar is still planned, breadcrumb fallback is Home → All Tools → Tool.
- When pillar is published, breadcrumb becomes Home → Pillar → Tool without changing the tool URL.
- Registry verification checks unique IDs/slugs, valid tool references, real routes and content modules.
- No “Coming Soon” items inside indexable pillar content.
Professional, consistent and accessible across every page
| Token / rule | FivoTools standard |
|---|---|
| Layout width | Content max ~1200px; tool work area usually 900–1040px; readable article column ~760px. |
| Spacing | 4/8/12/16/24/32/48px scale. No arbitrary per-tool spacing. |
| Radius | 10px controls, 14px cards, 18px major sections. |
| Typography | System/Inter-style stack; body 16px target, line-height ~1.6; clear 3-level heading hierarchy. |
| Color | Navy text/structure, blue primary action, teal accent, semantic success/warning/error. Contrast tested to WCAG 2.2 AA. |
| Targets | WCAG AA requires 24×24px or sufficient spacing; FivoTools internal target is 44px minimum height for primary controls. |
| Focus | Visible 3px focus ring; sticky headers/toolbars may not obscure focused controls. |
| Motion | Functional only; respect reduced motion. |
Shared component inventory
Navigation
SiteHeader, MobileNav, Breadcrumbs, CategoryNav, SiteFooter.
Forms
Text/number/money/time fields, UnitField, Select, SegmentedControl, Slider, Checkbox, FileDrop.
Results
ResultPanel, PrimaryValue, BreakdownRows, Assumptions, Copy/Download/Reset.
Heavy tools
FileQueue, ProgressItem, ThumbnailGrid, DocumentPreview, SignatureCanvas, StatusNotice.
Form behavior rules
- Labels always visible; units sit beside the field, not only in placeholder text.
- For decimals/currency, use a centralized parser; avoid browser-specific accidental exponent/wheel behavior.
- Show errors after blur or submit; after first submit, live revalidation is allowed.
- Do not clear valid user input after an error.
- Primary action: Calculate / Convert / Process / Generate. Reset is secondary and never adjacent to destructive Delete without separation.
- Results use
role="status"or equivalent polite live region where updates need announcement. - Drag interactions always have non-drag alternatives.
Exact information architecture for public and private pages
Tool page
Header
Breadcrumb
H1 + one-sentence value + privacy/estimate note when relevant
Primary Tool Card
- input/options
- primary action
- stable result/progress area
Optional consent-aware AdSlot AFTER the core interaction/result
How to use
Method / Formula / Processing explanation
Worked examples
Assumptions / Limitations / Sources / Reviewed date
Related tools + guides
Report an error
FooterHomepage
Compact brand intro, tool search, published pillars, popular/live tools, guides and trust—not a giant decorative hero.
Pillar page
Category explanation, “choose the right task” pathways, grouped live tools, unique comparison text and relevant guides.
Article/Guide
Breadcrumb, title, author/reviewer/date, readable body, sources, relevant tool CTA and related content.
Document builder
Desktop: Editor (left) | Live print preview (right)
Mobile: Editor tab | Preview tab
Top bar: Autosave status | Import/Export draft | Clear data
Bottom: Print | Download PDFBackend/CMS
Login
Dashboard: drafts / published / reports / contacts
Post list with search/status/type filters
Editor: title, slug, excerpt, body, SEO, sources, author/reviewer, preview
Publish guard: missing title/slug/body/meta/author/source rules
Contacts / error reports / redirect log / audit logAdSlot.astro is disabled until approval/configuration. It reserves layout space and loads only when consent/policy requirements are satisfied. It never appears inside the primary action cluster.Every tool handles idle, invalid, processing and failure predictably
| Tool family | Standard interaction | Special states |
|---|---|---|
| Calculator | Inputs → Calculate → stable result. Optional recalculation only after first valid result. | Invalid assumptions, division-by-zero, impossible dimensions. |
| Image/File | Select files → configure → Process → per-file queue/results. | Queued, processing, canceled, unsupported, partial batch success, memory limit. |
| PDF organizer/editor | Load → preview/model edits → explicit Export. | Encrypted PDF, rendering failure, unsaved changes, coordinate mismatch prevention. |
| Document builder | Edit structured draft → preview → export. | Autosave, local quota failure, import validation, multi-page overflow. |
Standard error codes
REQUIRED
INVALID_FORMAT
OUT_OF_RANGE
ZERO_DENOMINATOR
UNSUPPORTED_FILE
ENCRYPTED_PDF
DECODE_FAILED
MEMORY_LIMIT
CANCELED
STALE_OR_MISSING_RATE
EXPORT_FAILED
UNKNOWNInternal error code stays stable for tests/analytics; user-facing message is plain and actionable. Never show stack traces or raw library errors.
Simple code, explicit math, predictable modules
- ES modules only. Named exports for shared primitives; default export only where framework convention helps.
- JSDoc for public functions, input/output shapes and non-obvious assumptions.
- One module = one responsibility. No
utils.jsdumping ground. - Use
constby default; no implicit globals; noeval/new Function. - Normalize input first, calculate in canonical units, format last.
- Time durations use integer minutes.
- Money uses
big.jsor one audited decimal/rounding adapter; intermediate calculation and display rounding are separate. - Material purchase rounding occurs only at the purchase stage.
- Date-aware official rates are append-only records with effective ranges; never overwrite history.
- Same normalized input + same data version = same result.
Rate dataset shape
{
id: 'irs-mileage-business-2026-h2',
purpose: 'business',
ratePerMile: 0.76,
effectiveFrom: '2026-07-01',
effectiveTo: '2026-12-31',
sourceUrl: 'https://www.irs.gov/...',
reviewedAt: '2026-07-28'
}One worker-based pipeline, format-specific adapters
Validate file signature/bytes/pixels
→ decode (native or lazy fallback)
→ normalize orientation / color / alpha policy
→ optional resize
→ encode
→ Blob / preview / download
→ close bitmap, clear canvas, revoke URL, release bufferQueue
Stable job IDs, bounded concurrency, progress, cancel and per-file errors. One failing file does not fail the batch.
Native + fallback
Feature-detect native decode/encode; use jSquash/libheif fallback only on relevant routes and only after user intent.
Privacy
No source upload, filename analytics or persistent server storage. Metadata behavior is documented.
Worker contract
// main -> worker
{ type: 'PROCESS', jobId, payload, options }
{ type: 'CANCEL', jobId }
// worker -> main
{ type: 'PROGRESS', jobId, completed, total }
{ type: 'RESULT', jobId, buffer, meta }
{ type: 'ERROR', jobId, code, message }- Use
new Worker(new URL('./worker.js', import.meta.url), { type:'module' }). - OffscreenCanvas is preferred when supported; Canvas fallback is mandatory.
- Do a real Astro/Vite production spike before selecting jSquash package versions; exclude affected codecs from Vite dependency optimization if the official workaround is required.
- HEIC fallback licensing/redistribution must be documented in
THIRD_PARTY_NOTICES.md.
PDF.js for preview/rendering; pdf-lib for document manipulation
Preview layer
pdfjs-dist, same package/worker version, low-resolution lazy thumbnails, coordinate mapping and page metadata.
Mutation/export layer
pdf-lib load/copy/draw/form/CropBox/save. Create a new output from an immutable page plan when ordering/deleting pages.
- PDF tools are in-memory; do not claim streaming/chunked merge.
- Encrypted PDFs may be unsupported; do not use
ignoreEncryptionas a fake decrypt path. - CropBox changes visual crop only; crop is not redaction.
- Fill & Sign is AcroForm filling + electronic visual overlays, not cryptographic certificate signing.
- PDF.js and worker are bundled/self-hosted from the same installed version.
- Unicode text requires a suitable embedded permissively licensed font and fontkit/document font configuration.
- Preview scale and export coordinate systems are tested on rotated/mixed-size pages.
Structured local data → vector/selectable PDF
Validated structured draft
→ debounced IndexedDB autosave
→ document-specific layout model
→ live print preview
→ pdfmake/direct vector export or CSS print
→ selectable text PDF
→ optional JSON backup/importLocal drafts
Versioned IndexedDB schema, migration function, autosave indicator, Clear Data and JSON export/import.
Fonts
Self-host only permissively licensed fonts needed for the selected templates; retain notices. Do not bundle unnecessary weights.
Quality
Multi-page pagination, repeated table headers, long text wrapping and PDF text extraction are release tests.
Dynamic editorial operations with strict RLS
| Table | Purpose | Key rules |
|---|---|---|
profiles | Admin/editor/support identity and active status | ID = auth user; role constrained; no public directory by default. |
posts | Blog/guide draft and published content | Unique slug; type/status; author/reviewer; SEO/source/review fields. |
post_revisions | Editorial history/rollback | Append revisions at publish/update milestones. |
contact_messages | General contact inbox | Controlled server insert; no anonymous select. |
error_reports | Tool/content correction reports | Tool ID/browser/error category; never private calculator/file contents. |
redirects | Old slug → new canonical path | One-to-one permanent redirect map. |
audit_log | Admin/editor changes | Append-only safe metadata; no secret/message body dump. |
RLS matrix
- Anonymous: read published posts/guides only.
- Editor: manage allowed content through authenticated JWT and RLS.
- Support: contact/error workflow only.
- Admin: roles/settings/audit with explicit server-side authorization.
- Service/admin secret: rare, server-only and not the default CMS client.
Publishing contract
- Full article title/meta/canonical/H1/body/author/date/Article JSON-LD exists in the SSR response.
- Draft preview is authenticated and
noindex. - Slug change creates redirect record and updates internal links.
- Markdown is sanitized server-side; raw HTML disabled unless allowlisted.
- Public user tool files never use Supabase Storage. Editorial images may, with quota and MIME controls.
- Database migrations live in
supabase/migrations/; periodic exports/backups are operationally required.
Every indexable page is complete before hydration
- Unique title, meta description, canonical, one H1, breadcrumb, OG data and meaningful HTML content.
- Tool engine may require JS; tool explanation/links never do.
- Correct HTTP 404 for missing routes; backend/preview/search states are noindex.
- Stable URLs; permanent redirects for renamed paths; canonical and internal links updated.
- Home, All Tools and published pillars use crawlable
<a href>links. - Structured data is visible-content accurate. Safe default: Organization/WebSite, WebPage, BreadcrumbList, Article/BlogPosting.
- No fake aggregate ratings or unsupported rich-result promises.
- Important content is not hidden behind click-dependent lazy loading.
Sitemaps
/sitemap.xml # sitemap index
/sitemap-tools.xml # static tool routes
/sitemap-pages.xml # home, all-tools, published pillars, trust pages
/sitemap-content.xml # published SSR blog/guidesContent contract generated by development
Tool page slots
How to use, method, examples, assumptions, sources, related tools and report-error link.
Pillar page slots
Category intro, task pathways, grouped tools, differences, guides and breadcrumbs.
Article slots
Author/reviewer/date, source notes, relevant tool CTA and related content.
Measure utility without collecting user inputs
| Event | Allowed parameters | Never include |
|---|---|---|
tool_start | tool_id, mode | Amounts, times, dimensions, filenames |
tool_complete | tool_id, mode, duration_bucket, result_type | Result values or file contents |
tool_error | tool_id, generic error_code, stage | Raw exception with personal content |
download | tool_id, output_format, batch_bucket | Filename/client/document text |
copy_result | tool_id | Copied result |
- Analytics/ad scripts respect applicable consent settings.
- Public calculators never encode sensitive values in URLs.
- Report Error can include tool ID, app version and browser summary, but not automatic private input/file attachment.
- Core functionality remains usable if analytics is blocked.
Defense for server routes, admin sessions and generated output
Server
- HTTPS production; secure/SameSite cookie behavior.
- Validate body schema, content type and size.
- Origin/CSRF protection for authenticated mutations.
- Honeypot + timing + rate controls on public forms; optional challenge only when abuse requires it.
- RLS + server role check; hiding links is not authorization.
- No stack traces/secrets in responses.
Content/files
- Sanitize Markdown/managed HTML.
- Validate MIME and magic signatures where practical.
- Sanitize output filenames.
- Self-host/pin npm/WASM assets; avoid random runtime CDN code.
- CSP begins Report-Only and is tested with CMP/ads/analytics before enforcement.
THIRD_PARTY_NOTICES.mdtracks licenses.
Recommended headers: X-Content-Type-Options: nosniff, sensible Referrer-Policy, Permissions-Policy, frame restrictions and HSTS only after HTTPS is proven.
Light calculators stay light; heavy tools pay their own cost
| Layer | Budget / rule |
|---|---|
| Global public shell | Minimal shared JS; no PDF/image/document libraries. |
| Calculator route | Only Preact/tool engine/shared primitives. No network call for result. |
| Image route | Codec imported after file selection or process action; Worker queue. |
| PDF route | pdf-lib/PDF.js route-only; thumbnails lazy; export sequential/bounded. |
| Ads/CMP | Consent-aware and dimension-reserved; never block the core tool unnecessarily. |
| CMS | Paginated queries, selected columns, private/no-store responses. |
Browser policy
- Support current stable Chrome/Edge/Firefox/Safari and current mobile Chrome/iOS Safari; test exact compatibility before each heavy-tool release.
- Feature detection, not user-agent guessing.
- OffscreenCanvas/createImageBitmap fallback paths.
- No Internet Explorer support.
- Large file limits are benchmarked per tool/device class; marketing copy never promises infinite capability.
Evidence before release
| Layer | Tool | Release evidence |
|---|---|---|
| Engine | Vitest | Golden cases, boundaries, invalids, reverse/round-trip, units and rounding. |
| Rate data | Vitest | Effective-date boundaries, source/review metadata, missing-future behavior. |
| UI | Preact/manual | Idle/invalid/processing/success/partial/error/cancel/reset. |
| E2E | Playwright | Desktop + mobile, deep routes, downloads, 404, auth/publish smoke tests. |
| Accessibility | Manual + axe-core optional | Labels, keyboard, focus, drag alternatives, status announcements, contrast. |
| SEO | View Source/HTTP/Rich Results Test | Title/H1/canonical/content/links/JSON-LD before hydration; correct status. |
| Performance | DevTools/Lighthouse/field CWV | Bundle isolation, long tasks, memory cleanup and layout stability. |
| Documents | PDF.js parser/manual | Selectable text, extraction order, pagination, reopen output. |
Golden fixture rule
Expected values must be independently calculated or sourced. Generating expected values with the same engine under test is not verification.
Browser/file fixture rule
- Use real legally redistributable HEIC/AVIF/PDF samples plus generated synthetic edge files.
- Keep fixtures small; document origin/license.
- Test production build paths for WASM and PDF worker—not only dev server.
No Pro purchase; install packages only when their phase begins
| Phase | Packages | Notes |
|---|---|---|
| Foundation | astro, @astrojs/node, @astrojs/preact, preact, @astrojs/sitemap, @supabase/supabase-js, @supabase/ssr | Core only. |
| Quality | @astrojs/check, typescript, eslint, eslint-plugin-astro, vitest, @playwright/test, axe-core optional | TypeScript package is tooling; authored source remains JS. |
| Money/documents | big.js, pdfmake | Invoice/Estimate/Resume/Cover Letter. |
| Image | fflate, selected @jsquash packages, libheif-based decoder | Install only selected codecs; verify Vite/WASM and licenses. |
| pdf-lib, pdfjs-dist, signature_pad, @pdf-lib/fontkit if needed | Pin PDF.js worker to same package version. | |
| CMS body | marked + sanitize-html or equivalent audited stack | Server render + sanitize. |
@squoosh/libis not the 2026 choice; package says it is no longer maintained.libheif-js-class decoder requires LGPL compliance review.- Self-host fonts/WASM and keep notices where practical.
- Do not update every dependency independently in production; group, test and rollback via lockfile.
Phase 0 proves the real hosting environment
Current August 2026 cPanel documentation lists EasyApache Node packages through Node 22, while upstream Node 22 and 24 are LTS and Node 20 is EOL. Use the newest hosting-supported LTS; do not make Node 24 mandatory before the host proves it.
- Create a minimal Astro app.
- Install Node adapter and deploy one static + one
prerender=falseroute. - Verify environment variables, HTTPS proxying, deep links, 404, logs and restart.
- Test standalone entry
dist/server/entry.mjs. - If Passenger requires it, use a minimal
app.jswrapper after proof.
// app.js — only if the actual host requires this startup file
import('./dist/server/entry.mjs').catch((error) => {
console.error('Astro startup failed', error);
process.exit(1);
});Release SOP
npm ci
npm run verify
npm run build
# Deploy according to proven host layout
# Restart from cPanel or Passenger restart mechanism
# Smoke-test static tools + SSR blog + backend auth + 404- Use staging subdomain/environment.
- Keep previous known-good build and lockfile.
- Never upload local
node_modules. - Database migrations/backups precede destructive changes.
- Verify logs after every restart.
Exact project order
Real cPanel Node/Passenger, static + SSR, env, HTTPS, logs, restart, 404.
Current first milestone.Repo, Astro/Preact, tsconfig checkJs, lint/tests, design tokens, base layouts.
No batch tools.SEOHead, registries, ToolPage/PillarPage, form/result primitives, sitemap skeleton, scaffold scripts.
Architecture freeze.Time Card end-to-end including UI/UX, fixtures, content, analytics and production deploy.
Pattern approved.Remaining nine tools in locked marketing order; Work & Pay + Roofing pillars.
AdSense product set.Supabase auth/RLS, SSR content, contact/error reports, redirects, audits, dynamic sitemap.
Before launch application.Security, accessibility, CWV, consent/ad slot, staging, rollback drill.
Go/no-go.Annual Income then image-platform spike + HEIC.
Codec/license checkpoint.Construction/home/pay/business expansion; document subsystem for Invoice/Estimate.
Growth set complete.Image expansion then date-aware IRS Mileage.
Worker/data maturity.pdf-lib/PDF.js base, then image→PDF, merge, split, organize.
Core PDF set.Resume, PDF→image, Fill/Sign, Cover Letter, Crop, Watermark, Page Numbers.
Authority set.Only research-approved tools using the same contract.
No rewrite.Adding any future tool
- Marketing approves intent, slug, pillar and priority.
- Technical spec locks inputs, outputs, formula/algorithm, assumptions, limits, sources and maintenance class.
- Run scaffold script.
- Implement pure engine + validation.
- Create independent fixtures + unit tests.
- Build UI from shared components and state machine.
- Add static Content.astro and tool route wrapper.
- Add registry entry, related tools and pillar relationship.
- Run unit/E2E/accessibility/SEO/performance/privacy QA.
- Stage, smoke-test, deploy, monitor and update
plan.md.
Recommended AI task prompt
Read AGENTS.md, plan.md and FivoTools_Development_Master_Plan_2026.html.
Then inspect the current repository and the relevant tool blueprint.
Implement only: [exact task].
Preserve the existing architecture, routes, registries, UI components and privacy model.
Engine/tests first when logic changes.
Do not change unrelated files or add dependencies without a documented need.
Run relevant checks plus npm run build.
Report files changed, checks run and anything unverified.Each tool has its own product, UI, algorithm, SEO, privacy and release contract
Filter by phase, pillar or implementation type. This catalog is the direct coding handoff for each tool.
01Time Card & Work Hours Calculator/tools/time-card-calculator/ · Work & PayLaunch 10Calculator
Multiple shifts থেকে daily/weekly worked time, unpaid breaks, overnight shifts এবং decimal / hh:mm totals বের করা।
/tools/time-card-calculator/ · work-pay · Launch 10 · Formula-stable / periodic UX review
Start time, end time, unpaid break; add/remove shift rows; 12/24-hour display; optional week grouping.
Per-shift duration, daily worked time, weekly total, total unpaid break, HH:MM and decimal-hour views, copyable summary.
Parse time → integer minutes. If end < start and overnight is allowed, add 1440. worked = end - start - break. Store totals as integer minutes; format only at output.
Desktop: compact weekly grid with day groups and add-shift action. Mobile: stacked day cards. Use an explicit Calculate button; after the first successful calculation, valid edits may recalculate without stealing focus. Result panel stays below/alongside the form and never replaces inputs.
Break > shift invalid; missing pair invalid; 24h+ shift requires explicit support; avoid Date/timezone/DST for simple duration arithmetic.
time/parse-time, time/duration, time/format-duration, validation, ToolShell, ResultPanel
Plain JS engine + Preact UI; shared time primitives.
No network call. Do not send entered times to analytics. Result updates should not cause layout shift.
Static content covers unpaid breaks, multiple shifts, overnight work, HH:MM vs decimal hours, examples and “time measurement only—not payroll law”.
Overnight, zero break, multiple shifts same day, exact midnight, invalid negative duration, decimal-hours conversion.
All required reference fixtures pass; user can enter a full week plus multiple shifts; overnight/break errors are clear; copy/reset work; no timezone dependency.
02Pay Raise Calculator/tools/pay-raise-calculator/ · Work & PayLaunch 10Calculator
Current pay, new pay, raise percentage or raise amount থেকে pay change এবং period equivalents বের করা।
/tools/pay-raise-calculator/ · work-pay · Launch 10 · Formula-stable / periodic UX review
Current wage/salary, raise % or amount or target new pay, pay frequency; optional hours/week and weeks/year.
New pay, increase/decrease amount, percentage change, old/new comparison and optional hourly/weekly/monthly/annual equivalents.
new = old × (1 + p/100); delta = new-old; percent = delta/old×100. Normalize period equivalents only after core change is calculated.
Start with a three-mode segmented control: “I know the percentage”, “I know the raise amount”, “I know the new pay”. Show only relevant fields. Use a side-by-side old/new comparison and label pay cut states plainly.
old=0 cannot calculate percent; negative values are pay cuts and must be labeled; do not imply net/take-home pay.
money/decimal, money/pay-period, percentage, validation, comparison result rows
Plain JS + shared money/pay-period helpers; use Big.js or one centralized round-to-cent policy for monetary output.
No pay values in analytics or URLs. Keep calculations local and render only generic event codes.
Explain percentage vs dollar raise, reverse calculation, pay raise vs pay cut and gross-pay assumptions. Include “pay rise” naturally in content without duplicate UK clone pages.
Percent mode, amount mode, target-pay reverse mode, hourly→annual, awkward decimals and rounding.
All three modes round-trip consistently; old=0 and pay-cut states are handled; period equivalents match shared pay-period tests.
03Deck Material Calculator/tools/deck-material-calculator/ · ConstructionLaunch 10Calculator
Deck dimensions, board width/gap/length এবং waste থেকে board rows, linear length এবং purchase estimate তৈরি করা।
/tools/deck-material-calculator/ · roofing-construction · Launch 10 · Formula-stable / periodic UX review
Deck length/width, board actual width, gap, board length, orientation, waste %, unit system.
Deck area, board rows, required linear length, base board count, waste-adjusted purchase count and orientation comparison.
For a chosen orientation, rows ≈ ceil((crossDimension + gap)/(boardWidth + gap)); linealLength = rows × runLength; estimated boards = ceil(linealLength/boardLength × (1+waste)).
Use a unit toggle, board presets with editable actual dimensions, orientation switch and simple diagram. Show base quantity and purchase quantity separately so waste/rounding is transparent.
Nominal vs actual board width; off-cut reuse/staggered joints can change count; waste is configurable, never universal.
units/length, units/area, materials/waste, purchase-rounding, geometry diagram
Plain JS + units/materials primitives; optional SVG diagram.
No network call. SVG is lightweight; unit conversion happens before the engine.
Explain actual vs nominal board dimensions, board gap, orientation, waste and why cuts can change purchase count.
Both orientations, zero gap, metric/imperial, exact multiples, short boards, waste rounding.
Both orientations and metric/imperial fixtures pass; actual board width/gap formula is correct; purchase count visibly rounds only at the end.
04Roof Pitch Calculator/tools/roof-pitch-calculator/ · RoofingLaunch 10Calculator
Rise/run, x:12 pitch, angle, percent grade এবং slope factor inter-convert করা।
/tools/roof-pitch-calculator/ · roofing-construction · Launch 10 · Formula-stable / periodic UX review
Rise & run OR x:12 pitch OR angle; unit-independent ratio inputs.
Pitch x:12, rise/run ratio, angle in degrees, percent grade, slope factor and a visual triangle.
ratio=rise/run; angle=atan(ratio)×180/π; grade=ratio×100; slopeFactor=sqrt(1+ratio²); x12=ratio×12.
Use tabs for Rise/Run, x:12 and Angle input modes. Update the SVG preview only after valid input. Keep the numerical result table stable and copyable.
run=0 invalid; extremely steep values; clarify roof pitch vs grade terminology.
geometry/roof-pitch, unit-independent ratio helpers, SVG diagram
Plain JS + geometry primitive + SVG visualization.
No network call. Keep SVG purely presentational with accessible text result.
Explain x:12 notation, angle/grade/slope-factor conversion, common pitches and non-structural limitation.
4:12, 6:12, 12:12, zero pitch, reverse conversions and round-trip tolerance.
Common pitch fixtures and reverse conversions are within documented tolerance; SVG and text result agree.
05Roofing Material Calculator/tools/roofing-material-calculator/ · RoofingLaunch 10Calculator
Projected roof size + pitch + waste থেকে sloped roof area, roofing squares এবং bundle/material purchase estimate করা।
/tools/roofing-material-calculator/ · roofing-construction · Launch 10 · Formula-stable / periodic UX review
Direct roof area OR footprint L/W; overhang per side; pitch; waste; bundles per square/product coverage preset.
Projected area, sloped roof area, waste-adjusted area, roofing squares, configurable bundles/packs and assumptions used.
Projected area uses actual footprint including 2× relevant overhangs. slopedArea=projectedArea×slopeFactor. wasteArea=slopedArea×(1+waste). squares=wasteArea/100 ft². bundles=ceil(squares×bundlesPerSquare).
First ask whether the user knows roof area or needs it derived from footprint. Put product coverage/bundles-per-square under clearly visible assumptions. Result breakdown follows area → waste → squares → bundles.
3 bundles/square is common but not universal; complex hips/valleys/dormers need extra measurement/waste; equal-pitch assumption must be visible.
geometry/roof-pitch, units/area, materials/waste, materials/purchase-rounding
Plain JS + roof-pitch/area primitives.
No network call. Product presets are local config; large diagrams are unnecessary.
Explain projected vs sloped area, roofing squares, configurable bundles/product coverage and extra waste for complex roofs.
No overhang, two-sided overhang, multiple waste rates, configurable bundle coverage, direct-area mode.
Footprint/overhang math is correct on both sides; product coverage is configurable; result never assumes all products use three bundles/square.
06Gravel Calculator/tools/gravel-calculator/ · MaterialsLaunch 10Calculator
Area এবং depth থেকে gravel volume, cubic yards/meters এবং optional weight estimate করা।
/tools/gravel-calculator/ · roofing-construction · Launch 10 · Formula-stable / periodic UX review
Length, width/area, depth, waste %, material density preset/custom.
Raw volume, waste-adjusted cubic yards/meters, optional tons by chosen density and optional material cost when price is supplied.
For feet: cuYd=(L×W×depthFt)/27. With waste: required=cuYd×(1+waste). tons=required×densityTonsPerYd³.
Offer Rectangle and Direct Area modes initially; circular area can be a later supported mode. Density preset is labeled editable. Place volume before weight because weight is less certain.
Density varies by material, grading and moisture; weight must be labeled estimate; never hardcode 1.4 tons/yd³ as universal.
units/length/volume/weight, materials/waste, density presets
Plain JS + area/volume/unit primitives.
No network call. Density selection is local. Avoid sending project dimensions to analytics.
Explain volume vs weight, depth conversion, density variability, waste and common use cases.
Inch depth conversion, metric conversion, custom density, zero depth, waste.
Volume conversions and custom density tests pass; result labels weight as estimate; invalid depth/density is blocked.
07Profit Margin & Markup Calculator/tools/profit-margin-markup-calculator/ · BusinessLaunch 10Calculator
Cost, selling price, profit, margin এবং markup calculate/reverse-solve করা।
/tools/profit-margin-markup-calculator/ · business · Launch 10 · Formula-stable / periodic UX review
Cost + selling price OR cost + target margin OR cost + target markup; currency display.
Cost, selling price, profit/loss, margin %, markup %, reverse-calculated target price and a clear margin-vs-markup comparison.
profit=revenue-cost; margin=profit/revenue×100; markup=profit/cost×100; revenueFromMargin=cost/(1-margin); revenueFromMarkup=cost×(1+markup).
Use mode tabs: Cost + Price, Cost + Margin, Cost + Markup. Keep margin and markup visually separated with a short definition beside each result.
Revenue=0/cost=0 division guard; margin >=100% invalid for reverse-price formula; losses should display negative values clearly.
money/decimal, percentage, validation, comparison table
Plain JS + Big.js/central money math.
No financial values in analytics. Decimal library is route-local/shared only among business tools.
Explain margin vs markup with worked examples and reverse pricing; avoid tax/accounting advice claims.
Margin vs markup known examples, loss state, zero guards, decimal money.
Known margin/markup examples and reverse formulas pass; losses and denominator errors are handled.
08Roof Area / Square Footage Calculator/tools/roof-area-calculator/ · RoofingLaunch 10Calculator
Horizontal roof projection/footprint এবং pitch থেকে sloped roof square footage/m² estimate করা।
/tools/roof-area-calculator/ · roofing-construction · Launch 10 · Formula-stable / periodic UX review
Footprint dimensions or projected area, overhangs, pitch; optional multiple roof sections.
Projected footprint area, slope-adjusted area, optional waste-adjusted area, square feet/m² and roofing squares.
projectedArea=(L+2×overhangL)×(W+2×overhangW); slopedArea=projectedArea×slopeFactor. Sum sections only if each section is explicitly modeled.
Allow multiple roof sections with add/remove rows. Each row has dimensions/pitch and a subtotal; final result aggregates sections. Mobile rows become cards.
Irregular roofs and mixed pitches require multiple sections; do not infer dormers/valleys.
geometry/roof-pitch, units/area, multi-section rows
Plain JS + geometry/roof primitives.
No network call. Multi-section state remains local and is cleared only by explicit reset/navigation.
Explain footprint/projected area vs sloped area, overhangs, multi-section roofs and limits for complex geometry.
Flat roof, 4:12, 12:12, metric/imperial, multi-section sum.
Flat/common/steep pitches and multi-section sums pass; complex-roof limitation is visible.
09Salary ↔ Hourly Calculator/tools/salary-hourly-calculator/ · Work & PayLaunch 10Calculator
Hourly/daily/weekly/biweekly/monthly/annual gross pay equivalents compare করা।
/tools/salary-hourly-calculator/ · work-pay · Launch 10 · Formula-stable / periodic UX review
Amount, pay period, hours/week, days/week if daily, weeks/year.
Hourly, daily, weekly, biweekly, monthly and annual gross equivalents with visible work assumptions.
Normalize input to annual: hourly×hours×weeks; daily×days×weeks; weekly×weeks; biweekly×weeks/2; monthly×12; annual unchanged. Derive all other periods from annual.
Use a “Known pay period” selector, amount and an Advanced assumptions disclosure for hours/week, days/week and weeks/year. Show all equivalents in one clear table.
52 weeks is editable; unpaid weeks change equivalence; gross pay only; monthly ≠ weekly×4.
money/pay-period, money/decimal, formatting
Plain JS + money/pay-period helpers.
No salary values in analytics. Result table is server-independent.
Explain 52-week/custom assumptions, gross vs net, biweekly vs monthly and job-offer comparison.
40×52 baseline, 50 workweeks, monthly conversion, biweekly, daily.
All pay periods round-trip through annual normalization; 52/custom workweeks and gross-only assumptions are visible.
10Paint Calculator/tools/paint-calculator/ · Home ImprovementLaunch 10Calculator
Walls/ceiling area, openings, coats এবং coverage থেকে paint quantity estimate করা।
/tools/paint-calculator/ · home-improvement · Launch 10 · Formula-stable / periodic UX review
Room L/W/H or individual walls; doors/windows with editable dimensions; coats; coverage rate; ceiling toggle; waste optional.
Paintable area, exact gallons/liters, coats/coverage breakdown and suggested purchase quantity without hiding assumptions.
wallArea=2(L+W)H - openingArea. Add ceiling L×W when selected. paintVolume=(paintableArea×coats)/coverage; show exact gallons/liters plus practical purchase suggestion.
Provide Room mode and Individual Walls mode. Openings are addable rows with editable dimensions. Coverage/coats are visible assumptions, not hidden advanced values.
Coverage varies by product/surface; primer separate; fixed 20/15 ft² opening assumptions should not be forced.
units/area/volume, materials/coverage, openings rows, purchase-rounding
Plain JS + area/unit primitives.
No room dimensions in analytics. Opening rows remain local.
Explain wall/ceiling area, openings, coverage, coats, primer and product/surface variability.
Doors/windows, ceiling on/off, custom coverage, one/two coats, metric.
Room and wall modes agree on equivalent geometry; custom openings/coverage/coats and metric units pass.
11Annual Income Calculator/tools/annual-income-calculator/ · Work & PayGrowthCalculator
Hourly/daily/weekly/monthly income থেকে estimated annual gross income বের করা; unpaid time optional.
/tools/annual-income-calculator/ · work-pay · Growth · Formula-stable / periodic UX review
Pay amount + period; hours/week; weeks/year/unpaid weeks; optional basic overtime inputs.
Estimated annual gross income plus monthly/biweekly/weekly equivalents and optional regular/overtime breakdown.
Normalize regular gross pay to annual. If basic hourly overtime mode is enabled: regular hours×rate + OT hours×rate×multiplier for paid weeks.
Use a known-period selector and an Advanced section for workweeks/unpaid weeks/basic overtime. Emphasize estimated annual gross, then period equivalents.
Gross not net; overtime is optional estimate, not legal entitlement; unpaid weeks cannot exceed year.
money/pay-period, time/hours, money/decimal
Plain JS + pay-period + money primitives.
No income values in analytics. Optional overtime logic remains local.
Explain gross annualization, unpaid weeks and optional overtime assumption; link back to Salary↔Hourly and Time Card.
Hourly, weekly, monthly, unpaid weeks, no overtime, basic overtime.
Hourly/weekly/monthly fixtures and unpaid weeks pass; optional overtime is clearly separated from base annualization.
12HEIC → JPG Converter/tools/heic-to-jpg/ · ImageGrowthImage / codec
HEIC/HEIF photos local browser processing-এ JPG-তে convert করা, no server upload.
/tools/heic-to-jpg/ · image-tools · Growth · Dependency/browser compatibility review
One/multiple HEIC files, JPEG quality, optional background color/metadata policy.
Per-file JPG download, original/output dimensions and size, quality used, processing status and batch download when applicable.
Attempt proven native decode path when supported; otherwise lazy-load a libheif-based decoder in a Worker. Decode → ImageData/bitmap → encode JPEG → Blob → download.
Full-width drop zone plus keyboard file picker, privacy note, quality slider and file queue. Process only after the user confirms options. Each file card shows progress, cancel/error and download; include Clear All.
EXIF orientation, huge photos, multi-image HEIF, alpha/background, metadata stripping; libheif-js class packages are LGPL-3.0 and require compliance review.
image/worker-client, image/file-validation, image/queue, image/download, object-url cleanup
Web Worker + Canvas/OffscreenCanvas + libheif-based decoder fallback. Package/license re-check at implementation.
Files stay in browser memory. Validate bytes and decoded pixel count; bounded queue; Worker; close ImageBitmap, revoke URLs and release buffers. Codec loads only after file selection.
Explain HEIC compatibility, JPG quality/background, local processing and what metadata is removed/preserved. Privacy claim must match network behavior.
Real iPhone HEIC samples, portrait orientation, large megapixels, multiple files, corrupt input, Safari/Chrome/Firefox.
Real legal-to-redistribute HEIC fixtures decode across target browsers; orientation/large/corrupt/batch cases pass; no network upload occurs.
13Concrete Calculator/tools/concrete-calculator/ · ConstructionGrowthCalculator
Slab, footing, wall, cylinder/post-hole volumes এবং bag/premix quantity estimate করা।
/tools/concrete-calculator/ · roofing-construction · Growth · Formula-stable / periodic UX review
Shape-specific dimensions, waste %, bag size/yield preset or custom yield.
Raw and waste-adjusted volume in ft³/yd³/m³, plus bag count from selected/custom product yield.
Compute shape volume in ft³/m³, convert to yd³/m³. bags=ceil(requiredVolumeFt³ / yieldPerBagFt³). Example QUIKRETE yields: 60 lb≈0.45 ft³, 80 lb≈0.60 ft³; keep editable/product-specific.
Use visual shape cards (slab, footing, wall, cylinder/post hole). Fields change by shape. Bag yield is a product preset/custom input and appears in the result assumptions.
Do not use fixed “45/60 bags per yd³” as universal product truth; bag yield/product varies; separate cylinder formula.
geometry/volumes, units/volume, materials/waste, product-yield presets
Plain JS + geometry/volume primitives.
No network call. Product-yield presets are small local data. Keep diagrams lightweight.
Explain supported shapes, cubic yard/meter conversion, waste and product-specific bag yield.
Slab, footing, cylinder, metric, waste, 60/80 lb preset and custom yield.
Shape formulas, product-yield fixtures, metric/imperial and waste pass; no universal bag count constant is hidden.
14Topsoil Calculator/tools/topsoil-calculator/ · LandscapingGrowthCalculator
Area + depth থেকে topsoil volume এবং optional weight estimate করা।
/tools/topsoil-calculator/ · home-improvement · Growth · Formula-stable / periodic UX review
Length/width or area, depth, waste/compaction allowance, optional density.
Raw and adjusted soil volume in yd³/m³/ft³ and optional weight estimate based on selected/custom density.
Volume=area×depth; convert to yd³/m³. Optional weight=volume×user-selected density.
Use Rectangle, Circle and Known Area modes if all are implemented; otherwise publish only finished modes. Depth input remains prominent because it drives volume.
Soil moisture/compaction change density; weight is estimate; depth units frequently mix inches/feet/cm.
units/area/volume/weight, materials/waste/density
Plain JS + units/volume primitives.
No network call; dimensions/density remain local.
Explain area×depth, cubic yards, compaction/moisture/density and why weight is approximate.
Depth conversion, metric, custom density, compaction/waste.
Depth/unit/density/waste cases pass; estimate labels are present.
15Flooring Calculator/tools/flooring-calculator/ · Home ImprovementGrowthCalculator
One/multiple rooms থেকে flooring area, waste, box count এবং optional material cost বের করা।
/tools/flooring-calculator/ · home-improvement · Growth · Formula-stable / periodic UX review
Room dimensions/areas, waste %, coverage per box, price per box or area.
Net floor area, waste-adjusted purchase area, boxes/packages required and optional cost breakdown.
netArea=sum(roomAreas); purchaseArea=netArea×(1+waste); boxes=ceil(purchaseArea/coveragePerBox); cost=boxes×pricePerBox if provided.
Use a multi-room table/card list, then product coverage per box and waste. Show net area, purchase area and boxes as separate stages.
Layout/pattern affects waste; box coverage exact from product; stairs/irregular rooms separate.
units/area, materials/waste, purchase-rounding, multi-room rows
Plain JS + area/material primitives.
No project dimensions/prices in analytics. Local state only.
Explain net area, waste, box coverage, layout/pattern effects and multi-room calculation.
Multi-room, exact box boundary, waste, cost, metric.
Multi-room, exact box boundary, waste and cost cases pass; box count rounds up correctly.
16Carpet Calculator/tools/carpet-calculator/ · Home ImprovementGrowthCalculator
Carpet roll width অনুযায়ী approximate strips/linear length/sq yards বের করা।
/tools/carpet-calculator/ · home-improvement · Growth · Formula-stable / periodic UX review
Room dimensions, roll width (common 12/15 ft presets + custom), orientation, price optional.
Strip count, linear carpet length, square yards/m², orientation comparison and optional cost estimate.
For each orientation: strips=ceil(crossDimension/rollWidth); linearLength=strips×runDimension; sqYd=linearLength×rollWidth/9. Show both orientations and estimated lower material use.
Show two orientation estimates side by side and explain that the result is material estimation, not a professional seam layout. Roll-width presets remain editable.
This is not professional seam/cut optimization; doorways, pattern repeat, stairs and room layout can change requirements.
units/length/area, orientation comparison, purchase-rounding
Plain JS + units.
No room dimensions/prices in analytics. Keep orientation comparison cheap.
Explain roll width, strip/orientation estimate, square yards and professional seam-layout limitation.
12/15-ft rolls, both orientations, metric, narrow/wide rooms, exact strip boundary.
Both orientations, roll widths, exact boundaries and metric conversions pass; seam limitation is visible.
17Overtime Pay Calculator/tools/overtime-pay-calculator/ · Work & PayGrowthCompliance-sensitive calculator
Basic hourly regular + overtime gross-pay scenarios calculate করা; legal entitlement decide করা নয়।
/tools/overtime-pay-calculator/ · work-pay · Growth · Source-reviewed / event-driven
Hourly/regular rate, total hours, threshold, multiplier; optional separate regular/OT hours mode.
Regular hours/pay, overtime hours/pay, total gross pay, overtime premium and effective average hourly rate.
Basic case: regHours=min(total,threshold); otHours=max(0,total-threshold); pay=regHours×rate + otHours×rate×multiplier.
Use Total Hours mode and Separate Regular/OT Hours mode. Offer 1.5× and 2× presets plus custom multiplier. Place legal/eligibility disclaimer near assumptions, not as a disruptive modal.
Do not call the math “FLSA compliant.” Under FLSA the regular rate can include bonuses/other earnings and state rules may differ. Default 40h/1.5× is an example, configurable.
time/hours, money/decimal, sourced-content block
Plain JS + money/time helpers; source-backed content.
No wage/hour values in analytics. Official explanatory content has review metadata.
Explain basic overtime math, configurable multiplier and that legal entitlement/regular-rate calculations can differ by law/state.
40/44 hours, custom threshold/multiplier, no OT, decimal hours, disclaimer/source review.
Basic arithmetic fixtures pass; copy never says “legally owed”; source/review metadata is current.
18Job Costing Calculator/tools/job-costing-calculator/ · Business / ContractorGrowthCalculator
Labor + materials + subcontractors + overhead + target margin/markup থেকে quote price estimate করা।
/tools/job-costing-calculator/ · business · Growth · Formula-stable / periodic UX review
Itemized labor/material/subcontractor/misc, overhead flat or %, target margin OR markup.
Itemized direct cost, overhead, total job cost, target profit, quote price and margin/markup comparison.
directCost=sum(items); totalCost=directCost+overhead. Margin pricing=totalCost/(1-margin); markup pricing=totalCost×(1+markup).
Use itemized sections for labor, materials, subcontractors and other costs. Overhead and pricing target are separate panels. Result can be copied into the Estimate Generator later without silent data transfer.
Margin and markup must remain distinct; overhead basis visible; taxes not automatically assumed.
money/decimal, percentage, itemized rows, IndexedDB draft adapter optional
Preact + Big.js + optional IndexedDB draft.
No item values in analytics. Optional local drafts must include Clear Data and explain browser-local storage.
Explain direct cost, overhead, margin vs markup, quote price and what is excluded.
Flat/% overhead, margin/markup modes, zero/negative guards, many line items.
Itemized totals, flat/% overhead, margin/markup and decimal money pass; estimate handoff is explicit and optional.
19Free Invoice Generator/tools/free-invoice-generator/ · B2B DocumentsGrowthDocument builder
No-login invoice compose, local drafts and selectable-text/vector PDF export.
/tools/free-invoice-generator/ · business · Growth · Template/font/browser review
Seller/client, invoice number/date/due date, line items, discount, tax rate, shipping/fees optional, currency, notes, logo.
Printable/downloadable invoice PDF, subtotal/discount/tax/fees/total breakdown, local draft status and optional local JSON backup.
Use decimal-safe line math. Recommended transparent order: line subtotal → configured discount → taxable subtotal → user-entered tax → other fees → total. PDF layout generated as text/vectors, not screenshot.
Desktop: editor left, live printable preview right. Mobile: Editor/Preview tabs. Autosave status is visible; include Duplicate, Clear Local Data, Print and Download PDF. Never require account creation.
No automatic legal tax determination; long item names/pagination, logo aspect ratio, rounding, currencies. Never use html2canvas for final invoice PDF.
documents/draft-store, documents/money-table, documents/pagination, documents/vector-export, money/decimal
Preact + IndexedDB + Big.js + pdfmake (MIT) or a direct vector document layer; CSS print fallback.
Invoice/client data stays in IndexedDB on the device. Explain that local browser data is not encrypted backup. Provide Clear Data and optional JSON export. PDF library loads only on builder route.
Explain invoice fields, totals/order of operations, local autosave/privacy and “free PDF/no account” truthfully. Do not claim tax compliance.
Multi-page invoice, discounts/tax, long text, zero tax, logo, PDF text selection/extraction.
One- and multi-page invoices export selectable text; totals match engine; autosave/clear/import/export work; no client data leaves browser.
20Free Estimate / Quote Generator/tools/free-estimate-generator/ · B2B DocumentsGrowthDocument builder
Invoice-related primitives reuse করে estimate/quote-specific document তৈরি করা।
/tools/free-estimate-generator/ · business · Growth · Template/font/browser review
Seller/client, estimate number/date, valid-until, scope/line items, exclusions, terms, tax/discount optional.
Printable/downloadable estimate PDF, validity/terms/scope summary, local draft and optional local conversion into an invoice draft.
Share money/table/PDF primitives with Invoice, but keep separate estimate semantics and template config. Optional local “convert to invoice” copies data into invoice draft.
Reuse the document-builder shell, but use estimate-specific fields: valid-until, scope, exclusions, terms and optional acceptance line. “Convert to invoice” creates a new local invoice draft and leaves the estimate intact.
Not just an Invoice page with heading changed; validity/scope/terms matter. Do not imply legal acceptance/binding status.
documents/draft-store, documents/money-table, documents/pagination, documents/vector-export, invoice-to-estimate mapping primitives
Preact + IndexedDB + Big.js + same vector document subsystem.
Estimate/client data stays local; same disclosure and Clear Data controls as Invoice. No server sync by default.
Explain estimate vs invoice, validity, scope/terms, local privacy and convert-to-invoice behavior.
Expiry date, terms, multi-page scope, convert-to-invoice data integrity.
Estimate-specific fields and multi-page PDF work; conversion creates a separate invoice draft without mutating the estimate.
21Bulk Image Resizer/tools/bulk-image-resizer/ · ImageExpansionImage / codec
Multiple JPG/PNG/WebP images local browser-এ resize এবং batch-download করা।
/tools/bulk-image-resizer/ · image-tools · Expansion · Dependency/browser compatibility review
Files, target width/height/max-side/percentage, aspect lock, output format/quality optional.
Resized files with final dimensions and bytes, per-file success/failure, download buttons and ZIP download for multiple outputs.
Decode with createImageBitmap when appropriate; resize via OffscreenCanvas in Worker when supported, Canvas fallback; encode Blob; zip outputs when multiple.
Drop/select files, then choose resize mode and output options before processing. Queue view supports remove, retry, cancel and Download All. Drag reorder must also have move up/down controls.
Decoded pixel memory matters more than file size; process with bounded concurrency; close ImageBitmap, release canvas/object URLs; preserve transparency for PNG/WebP.
image/worker-client, image/queue, canvas-resize, image/download, fflate ZIP
Native browser APIs + Worker + fflate (MIT).
Bounded concurrency; feature-detect OffscreenCanvas; Canvas fallback; decoded pixel cap; release ImageBitmap/canvas/object URLs; ZIP only after outputs are ready.
Explain resize modes, aspect ratio, output formats, batch privacy and device-safe limits.
Large megapixels, mixed formats, portrait/landscape, aspect lock, mobile memory, batch zip.
Mixed image batches, aspect modes, fallback path, ZIP and cancel/retry pass without unbounded memory growth.
22Image Compressor/tools/image-compressor/ · ImageExpansionImage / codec
JPEG/WebP/AVIF/PNG image size reduce করা without artificial daily quota.
/tools/image-compressor/ · image-tools · Expansion · Dependency/browser compatibility review
Files, quality/format, optional max dimensions/target size mode.
Compressed files, before/after bytes, percentage saved, dimensions, quality/format used and per-file status.
Decode once → optional resize → encode with format-appropriate codec. Use jSquash codecs in Worker where quality/control is beneficial; target-size mode iteratively adjusts quality with bounded attempts.
Offer Quality mode and optional Target Size mode. Before/after preview is optional and must not decode all batch files simultaneously. Results emphasize savings and any file that became larger.
Do not promise infinite “unlimited”; device-safe file/pixel/concurrency limits. Astro uses Vite and jSquash documents Vite/WASM caveats—run a production-build spike and pin working versions.
image/worker-client, image/queue, codec-loader, image/download, fflate ZIP
@jsquash/* + Worker + Canvas/OffscreenCanvas + fflate for batch.
Worker codecs lazy-load. Use bounded iterations for target-size mode, bounded concurrency and memory cleanup. If output grows, report honestly.
Explain quality vs size, resize vs compression, format differences, target-size approximation and local processing.
JPEG/WebP/PNG/AVIF, transparency, target size, 20–50 image batches under safe queue, production build WASM loading.
JPEG/WebP/PNG/AVIF supported paths, target-size approximation, transparency, batch queue and production WASM build pass.
23AVIF → JPG / PNG Converter/tools/avif-to-jpg/ (+ /tools/avif-to-png/ only if content is distinct) · ImageExpansionImage / codec
AVIF local decode করে JPEG বা PNG output দেওয়া; one shared engine.
/tools/avif-to-jpg/ (+ /tools/avif-to-png/ only if content is distinct) · image-tools · Expansion · Dependency/browser compatibility review
AVIF files, output format, JPEG quality, JPEG background color.
Converted JPG or PNG, dimensions, file size, alpha/background behavior and per-file status.
Use proven native decode path when available; fallback to @jsquash/avif decoder. JPEG encode removes alpha, so composite onto selected background; PNG preserves alpha.
Output-format choice is explicit. Choosing JPG reveals quality/background controls; choosing PNG hides them and explains alpha preservation. Use the same queue pattern as other image tools.
Native AVIF support does not eliminate need for tested fallback; avoid thin duplicate SEO pages; very large images need memory cap.
image/worker-client, codec-loader, alpha/background compositor, image/download
Native decode + @jsquash/avif fallback + Canvas/Worker.
Native decode first only when tested; lazy fallback. Files stay local; close bitmaps/revoke URLs; do not load AVIF codec site-wide.
Explain AVIF, JPG vs PNG, transparency, quality/file-size tradeoffs and local conversion.
Alpha AVIF, JPG background, PNG transparency, native/fallback browsers, corrupt file.
Native/fallback decode, alpha/JPG background, PNG transparency and batch/corrupt cases pass.
24IRS Mileage Calculator/tools/irs-mileage-calculator/ · US BusinessExpansionMaintained rate data
Drive date + miles + purpose থেকে applicable IRS standard mileage rate ব্যবহার করে amount estimate করা; eligibility decide করা নয়।
/tools/irs-mileage-calculator/ · business · Expansion · Source-reviewed / event-driven
Date/period, miles, purpose (business/medical/charity; moving only where eligible), optional multiple trips.
Applicable official mileage rate, effective period, miles, estimated amount and source/review metadata.
Versioned dataset with effectiveFrom/effectiveTo. Research-time 2026 example: Jan 1–Jun 30 business 72.5¢, medical/moving 20.5¢, charity 14¢; Jul 1–Dec 31 business 76¢, medical/moving 23.5¢, charity 14¢. amount=miles×rate.
Primary inputs are drive date, miles and purpose. Result includes a prominent official-rate/effective-date source panel. If the selected date is outside the dataset, block calculation instead of reusing the last rate.
2026 changed mid-year; moving eligibility is restricted; standard rate availability/deductibility depends on taxpayer facts. Always surface source/effective date.
data/rates/irs-mileage, date-range lookup, money/decimal, source metadata
Plain JS + local versioned data + official-source metadata.
Only generic tool events; miles/date/purpose are not analytics payload. Dataset is local and versioned.
Display rate/effective period/source in static/SSR content and result; explain standard rate is optional and eligibility depends on taxpayer facts.
Jun 30 vs Jul 1 boundary, each purpose, multiple trips, future missing-rate behavior.
Jun 30/Jul 1 2026 boundaries and each purpose pass; unsupported future date blocks with source guidance.
25JPG / PNG → PDF Converter/tools/jpg-to-pdf/ · PDFExpansionPDF / file
Multiple local JPG/PNG images arrange করে one PDF create করা।
/tools/jpg-to-pdf/ · pdf-tools · Expansion · Dependency/browser compatibility review
Images, order, page size/orientation, margins, fit/fill/original-size mode.
One PDF containing images in chosen order with configured page size/orientation/margins, page count and output size.
Create PDFDocument; embed each JPG/PNG; compute aspect-preserving placement; add page and draw image; save Blob.
Thumbnail strip/grid supports reorder with drag and move buttons. Page size, orientation, margin and fit mode are in a compact options panel. Show a page preview only for selected thumbnails to conserve memory.
Huge source images can bloat memory/PDF; PNG alpha; mixed orientation; no server upload.
pdf/load-save, image validation, thumbnail/order model, pdf page layout
pdf-lib (MIT) + optional Canvas pre-scale.
Images/PDF stay local. Pre-scale huge images where needed, release buffers, and load pdf-lib only on route.
Explain page size/orientation/margins/fit modes, local processing and differences from merge PDF.
Mixed JPG/PNG, A4/Letter, margins, reorder, huge image downscale, multi-page.
Mixed image formats/order/page sizes/margins export correctly; text not applicable; file remains local; huge-image guard works.
26Merge PDF/tools/merge-pdf/ · PDFExpansionPDF / file
Multiple PDFs reorder করে one merged PDF locally create করা।
/tools/merge-pdf/ · pdf-tools · Expansion · Dependency/browser compatibility review
PDF files and file order; optional page selection later.
Merged PDF, final file order, total page count, output size and unsupported/encrypted-file reporting.
pdf-lib loads source docs, copyPages into destination sequentially, save. Treat as in-memory processing; do not claim true streaming/chunked merge unless an engine actually supports it.
File cards show filename, page count and order. Support drag plus move buttons. Do not render every page; optional first-page thumbnails are lazy. One clear Merge button starts processing.
Encrypted/password-protected PDFs may be unsupported; very large documents need explicit memory/page/file limits.
pdf/load-save, pdf/page-plan, file order controls
pdf-lib.
PDFs stay local. Bound file/page counts based on measured memory. pdf-lib is in-memory; do not claim streaming.
Explain merge order, encrypted/unsupported files, local processing and practical device limits.
2/10 PDFs, mixed page sizes, reordered files, unsupported encrypted file, large-case guard.
Mixed page sizes and file order merge correctly; encrypted/oversized files show safe errors; memory limit is enforced.
27Split / Extract PDF Pages/tools/split-pdf/ · PDFExpansionPDF / file
Page ranges extract করা বা individual page PDFs তৈরি করা।
/tools/split-pdf/ · pdf-tools · Expansion · Dependency/browser compatibility review
PDF, page range syntax, mode: one combined extraction vs separate files.
One extracted PDF or multiple per-page/range PDFs, selection summary and ZIP when several files are produced.
Parse ranges (e.g. 1-3,5,8-10), validate, copyPages into output docs, zip separate outputs.
Provide a page-range text field with examples plus an optional thumbnail selector. Clearly switch between “one combined PDF” and “separate PDF files”.
Out-of-range, duplicates, reversed ranges, large page counts, encrypted files.
pdf/page-range-parser, pdf/copy-pages, fflate ZIP
pdf-lib + fflate.
PDF stays local. Produce outputs sequentially; ZIP after generation; release byte arrays where possible.
Explain extract vs split, page-range syntax, combined vs separate outputs and local processing.
Complex range parser, one page, all pages, duplicate policy, zip filenames.
Range parser, combined/separate modes, filenames and ZIP pass; invalid ranges are actionable.
28Delete / Organize / Reorder PDF Pages/tools/organize-pdf/ · PDFExpansionPDF / file
Thumbnail grid-এ PDF pages rotate/delete/reorder এবং clean new PDF save করা।
/tools/organize-pdf/ · pdf-tools · Expansion · Dependency/browser compatibility review
PDF; final ordered page model with delete/rotation state.
Reorganized PDF, final page count/order/rotation and a summary of deleted pages.
PDF.js renders low-res thumbnails lazily. Keep immutable source page IDs. On export, create a new PDF and copy pages in final order; apply rotation. Avoid mutation-order bugs from repeated removePage calls.
Use a virtual/lazy thumbnail grid with rotate, delete and selection controls. Drag reorder must have accessible move-before/move-after actions. Keep deleted pages recoverable until export or offer Undo.
Render thumbnails only when visible/near viewport; same PDF.js library and worker version; huge page counts.
pdfjs preview, pdf/page-plan, virtual thumbnails, pdf/copy-pages, rotation helpers
pdfjs-dist + pdf-lib.
PDF stays local. Render low-resolution thumbnails near viewport; use immutable page model; clear canvases and object URLs.
Explain reorder/delete/rotate workflow, local processing and undo-before-export behavior.
Reorder+delete combined, rotations, 100+ pages lazy render, page-size diversity.
Reorder+delete+rotate export matches the visible page plan; lazy thumbnails work at large page count; Undo works.
29Free ATS Resume Builder + PDF/tools/free-resume-builder/ · CareerDocument builder
Structured resume builder with local drafts and selectable-text, ATS-friendly PDF layout without paywall.
/tools/free-resume-builder/ · career-documents · Authority · Template/font/browser review
Contact, summary, experience, education, skills, optional sections, reorder, template.
Selectable-text resume PDF, local autosaved draft, section order, chosen template and optional JSON import/export for backup.
Structured data model → one-column ATS-safe default layout → vector/text PDF. In QA, parse generated PDF text and verify logical order.
Desktop split editor/preview; mobile tabs. Sections can be reordered with buttons and drag. Default template is single-column ATS-safe. Show autosave, Clear Local Data, Import Draft and Download PDF.
Do not promise every ATS will parse it perfectly; avoid screenshot PDFs, decorative tables/text boxes in ATS template, over-designed templates.
documents/draft-store, documents/section-model, documents/pagination, documents/vector-export, font registry
Preact + IndexedDB + pdfmake/direct vector document subsystem; permissively licensed embedded font.
Resume data stays in IndexedDB. Provide Clear Data/export. No profile analytics. PDF/font bundle route-only.
Explain selectable text, ATS-safe design principles, local drafts and that no builder can guarantee every ATS outcome.
2-page resume, long bullets, section reorder, text extraction order, Unicode name, print/PDF.
Two-page resume, Unicode supported font, section reorder, local drafts and PDF text extraction order pass.
30PDF → JPG / PNG Converter/tools/pdf-to-jpg/ · PDF / ImagePDF / file
Selected/all PDF pages render করে JPG/PNG download করা।
/tools/pdf-to-jpg/ · pdf-tools · Authority · Dependency/browser compatibility review
PDF, page selection, output format, quality, render DPI/scale.
JPG/PNG images for selected pages, output resolution/scale, filenames and ZIP for multi-page conversion.
PDF points use 72/in; targetDPI scale≈DPI/72. Render page sequentially or bounded concurrency with PDF.js to Canvas/OffscreenCanvas; encode image; zip multiple.
Show page thumbnails lazily, page-range selection and output resolution/format. Estimate resulting pixel dimensions before processing and warn/block unsafe settings.
300 DPI on large pages can use huge RAM; cap rendered pixel count; dispose canvases and page references progressively.
pdfjs render worker, page-range parser, canvas encode, fflate ZIP
pdfjs-dist + Canvas + fflate.
PDF stays local. Render sequentially/bounded; cap total output pixels; release canvases immediately after encoding.
Explain PDF page rendering, DPI/scale, JPG vs PNG, memory implications and local processing.
72/150/300 DPI, portrait/landscape, 50+ pages, alpha/white background, memory guard.
Selected pages and output scales match requested settings; pixel guard prevents unsafe work; ZIP and cleanup pass.
31Fill & Sign PDF/tools/fill-sign-pdf/ · PDFPDF / file
Existing AcroForm fields fill করা অথবা normal PDF page-এ text/check/date/electronic signature overlay বসানো।
/tools/fill-sign-pdf/ · pdf-tools · Authority · Dependency/browser compatibility review
PDF, form values; overlay text/check/date; drawn/typed signature; page and position.
Filled/signed PDF, form-field/overlay summary and clear statement that the signature is an electronic visual signature, not certificate signing.
Use pdf-lib form API for real AcroForms. For overlays, map preview coordinates back to PDF coordinate system and draw text/image. Signature Pad output can be PNG/SVG-derived image.
Use PDF preview with a toolbar for form fields, text, checkmark, date and signature. All placed items are selectable/movable before export. Distinguish existing form fields from visual overlays.
This is electronic signature placement, not cryptographic/certificate-based digital signing; coordinate mapping must handle zoom and rotation.
pdfjs preview/coordinates, pdf-lib forms/overlays, signature_pad, font registry
pdf-lib + pdfjs-dist preview + signature_pad (MIT).
PDF/signature stays local. Signature strokes are never analytics data. Preview rendering and overlay export are bounded and route-only.
Explain AcroForm filling vs visual overlays and electronic signature vs certificate-based digital signing.
AcroForm sample, flat PDF overlay, rotated page, high-DPI preview, signature placement/save/reopen.
AcroForm and flat-overlay fixtures save/reopen correctly; rotated/zoomed coordinate mapping passes; digital-signing disclaimer is visible.
32Free Cover Letter Builder + PDF/tools/cover-letter-builder/ · CareerDocument builder
Structured cover letter compose, local draft এবং selectable-text professional PDF export.
/tools/cover-letter-builder/ · career-documents · Authority · Template/font/browser review
Sender/recipient, date, salutation, paragraphs, closing, template.
Selectable-text cover-letter PDF, local autosaved draft, template choice and optional JSON import/export.
Structured data → vector text layout with line wrapping and pagination; reuse document primitives, not resume-specific semantics.
Use a focused letter editor with sender, recipient and body sections, live page preview, local autosave and matching professional templates. No AI-writing dependency.
Long body pagination, Unicode names, no AI dependency/claim, no fake ATS score.
documents/draft-store, documents/pagination, documents/vector-export, font registry
Preact + IndexedDB + pdfmake/direct vector document subsystem.
Letter data stays in IndexedDB with Clear Data/export. No content analytics. Document/font bundle route-only.
Explain cover-letter structure, matching templates, local drafts and no AI-writing dependency.
1/2 page letters, long addresses, Unicode, text extraction.
Long letter pagination, Unicode, local drafts and PDF text extraction pass.
33Crop PDF/tools/crop-pdf/ · PDFPDF / file
PDF page visible crop area/margins adjust করা without rasterizing the document.
/tools/crop-pdf/ · pdf-tools · Authority · Dependency/browser compatibility review
PDF, visual crop rectangle/margins, page selection.
Cropped PDF, applied CropBox values/page range and a persistent warning that cropping is not redaction.
Map preview crop to PDF coordinates and set CropBox. Keep MediaBox unchanged by default; changing MediaBox is a separate advanced operation, not necessary for ordinary visual cropping.
Provide visual crop handles and equivalent numeric margin fields so dragging is not required. Show a strong non-redaction notice before export.
Crop is NOT redaction; content outside CropBox may remain in the file. Rotated pages and mixed sizes require coordinate handling.
pdfjs preview/coordinates, pdf CropBox helpers
pdfjs-dist preview + pdf-lib.
PDF stays local. Preview is low resolution; export changes boxes without rasterizing. Warning clarifies content may remain outside CropBox.
Explain CropBox behavior and prominently state crop is not redaction/removal of hidden content.
Single/all pages, rotated page, mixed sizes, reopen PDF, verify hidden content still exists warning.
Numeric and drag crop produce same CropBox; rotated/mixed page sizes pass; non-redaction warning cannot be omitted.
34Add Watermark to PDF/tools/watermark-pdf/ · PDFPDF / file
Text/image watermark selected PDF pages-এ add করা while preserving original vector content.
/tools/watermark-pdf/ · pdf-tools · Authority · Dependency/browser compatibility review
PDF, text/image, opacity, angle, scale/font size, position, page range.
Watermarked PDF, selected pages, opacity/angle/placement summary and output size.
For each selected page, calculate transformed position and draw text/image with opacity/rotation. Embed a permissive font when Unicode text is supported.
Live preview on a selected representative page, controls for text/image, opacity, angle, size, position and page range. Keep text and image watermark modes separate.
Unicode font size, image alpha, rotation, page sizes, watermark should not rasterize full page.
pdfjs preview, pdf overlay positioning, font registry, page-range parser
pdf-lib + PDF.js preview optional.
PDF and watermark data stay local. Font/image assets are route-only and embedded as needed.
Explain text/image watermark, page ranges, opacity, rotation and vector preservation.
Text/image, opacity, 45°, selected pages, Unicode, mixed sizes.
Text/image watermarks, opacity/angle/position/page range/Unicode pass without rasterizing source pages.
35Add Page Numbers to PDF/tools/add-page-numbers-pdf/ · PDFPDF / file
Header/footer positions-এ custom page-number format add করা।
/tools/add-page-numbers-pdf/ · pdf-tools · Authority · Dependency/browser compatibility review
PDF, position, format e.g. Page {n} of {total}, start number, margins, page range.
Numbered PDF, selected page range, numbering format/start value/position and output size.
Get page count; calculate number text and position per page size/rotation; drawText on selected pages.
Use a 3×3 position selector plus precise margins, format tokens and start-page/start-number options. Preview first/representative/last page before export.
Mixed page sizes/rotations, clipping, custom start number, skip cover pages.
pdf overlay positioning, font registry, page-range parser, format-token parser
pdf-lib + preview optional.
PDF stays local. Page numbering should not rasterize or render every page for preview.
Explain header/footer positions, Page X of Y tokens, start numbers, cover-page skipping and vector preservation.
Page 1/10, start at 0/5, selected range, rotated landscape, mixed sizes.
Page X of Y, custom start/skip, position/margins, rotated/mixed pages pass without clipping.
Keep formulas stable, dependencies controlled and incidents isolated
| Cadence | Development review |
|---|---|
| Per release | Tests/build, routes/registry, static source, download output, security/privacy, staging smoke. |
| Monthly | Dependency/security advisories, production errors, browser compatibility of representative heavy tools. |
| Quarterly | Astro/Supabase/Node support, codec/PDF compatibility, WCAG/UX review, bundle and CWV regression. |
| Event-driven | IRS/rule changes, browser codec regression, library vulnerability, cPanel runtime change, AdSense/CMP policy change. |
Recovery matrix
| Incident | First isolate | Recovery |
|---|---|---|
| Wrong result | Engine/fixture | Add failing fixture, fix engine, regression test, update source note if facts changed. |
| One tool broken | Feature/route bundle | Rollback tool-specific change; static shell remains available. |
| CMS outage | SSR/Supabase | Public tools continue; restore dynamic layer separately. |
| Image/PDF crash | Pixels/pages/concurrency | Reduce in-flight memory, sequentialize, add cleanup/test. |
| WASM build failure | Vite/package version | Rollback lockfile; apply documented optimizeDeps/worker workaround after staging proof. |
| PDF worker mismatch | pdfjs-dist + worker | Bundle worker from same installed version. |
| Rate change | Versioned dataset | Append effective record, add boundary tests, never overwrite history. |
| Deployment failure | Node/Passenger/startup | Restore previous build/lockfile, inspect logs, reproduce in staging. |
“Works on my machine” is not complete
Correctness
- Independent golden fixtures.
- Unit tests green.
- Assumptions/rounding/units visible.
- Unsupported states honest.
UI / Accessibility
- 320px mobile and desktop.
- Keyboard, focus, labels, drag alternative.
- Idle/error/progress/success/cancel states.
- No clipped buttons or horizontal overflow.
SEO / Content
- View Source has title/H1/canonical/content.
- Breadcrumb/pillar/related links correct.
- Sources/review metadata when needed.
- Correct status and sitemap inclusion.
Performance / Privacy
- Heavy bundles isolated.
- No long main-thread work or resource leak.
- Files/inputs stay local as claimed.
- No sensitive analytics data.
Operations
npm run verifyand production build pass.- Staging and direct URL smoke test.
- Rollback artifact/commit exists.
plan.mdupdated.
AI report
- Files changed listed.
- Checks run listed.
- Unverified items disclosed.
- No unrelated changes.
Research basis reviewed 26 August 2026
Before implementing a sensitive dependency or current official rate, re-check the current source and pin the actual version used.
- Astro v6 — On-demand rendering
https://v6.docs.astro.build/en/guides/on-demand-rendering/
Static pages by default; route-level prerender=false; start static-first. - Astro — Client directives
https://docs.astro.build/de/reference/directives-reference/
client:* works on directly imported framework components; not dynamic tags. - Astro — Routing
https://docs.astro.build/en/guides/routing/
File-based routes and explicit page files. - Astro — Node adapter
https://docs.astro.build/en/guides/integrations-guide/node/
Standalone Node output for on-demand routes. - Astro — TypeScript config for JS projects
https://docs.astro.build/en/guides/typescript/
Keep tsconfig.json even when authored code is JavaScript. - Astro — CLI check
https://docs.astro.build/en/reference/cli-reference/
astro check diagnostics for CI/local verification. - Supabase — SSR Auth
https://supabase.com/docs/guides/auth/server-side
Cookie sessions and @supabase/ssr; package currently beta/unstable API warning. - Supabase — Choosing server package
https://supabase.com/docs/guides/auth/choosing-a-server-package
Use @supabase/ssr when identity is in cookies. - cPanel — Install Node app
https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-node.js-application/
Updated 20 Aug 2026; app.js/Passenger guidance and Node packages through 22. - cPanel — Passenger applications
https://docs.cpanel.net/knowledge-base/web-services/using-passenger-applications/
Passenger deployment behavior. - Google Search — JavaScript SEO basics
https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
Pre-rendered/SSR HTML remains a strong crawl/performance strategy. - Google Search — Structured data guidelines
https://developers.google.com/search/docs/appearance/structured-data/sd-policies
Visible, accurate, non-misleading structured data; no fake reviews. - Google Search — Breadcrumbs
https://developers.google.com/search/docs/appearance/structured-data/breadcrumb
Breadcrumb hierarchy and matching markup. - Google Search — SoftwareApplication
https://developers.google.com/search/docs/appearance/structured-data/software-app
Google rich-result path requires real rating/review data; do not fabricate. - web.dev — Core Web Vitals
https://web.dev/articles/vitals
LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 at the 75th percentile. - W3C — WCAG 2.2
https://www.w3.org/TR/WCAG22/
Accessibility target; includes focus, dragging alternatives and target-size criteria. - W3C — Target Size Minimum
https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
24×24 CSS px AA minimum or sufficient spacing; FivoTools internally targets 44px for primary controls. - MDN — OffscreenCanvas
https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas
Worker-capable canvas; feature-detect and provide fallback. - MDN — ImageBitmap.close
https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap/close
Explicitly release bitmap resources. - MDN — IndexedDB
https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
Async local structured storage for drafts. - jSquash
https://github.com/jamsinclair/jSquash
Browser/Worker WASM codecs; Apache-2.0; documented Vite/WASM issues. - @squoosh/lib
https://www.npmjs.com/package/@squoosh/lib
Package states the project is no longer maintained; do not choose as 2026 primary. - libheif-js
https://github.com/catdad-experiments/libheif-js
Browser/Node libheif build; current package license is LGPL-3.0. - pdf-lib
https://github.com/Hopding/pdf-lib
Browser-capable create/modify/forms/page-copy/drawing; MIT; no arbitrary page-text editing. - Mozilla PDF.js
https://github.com/mozilla/pdf.js/
Mozilla-supported PDF parsing/rendering; use pdfjs-dist and matching worker. - pdfmake
https://github.com/bpampuch/pdfmake
MIT pure-JS vector/text document generation with tables and pagination. - fflate
https://github.com/101arrowz/fflate
MIT browser/Node ZIP/compression; import only required functions. - Signature Pad
https://github.com/szimek/signature_pad
MIT canvas signature drawing. - big.js
https://github.com/MikeMcl/big.js
MIT decimal arithmetic for money/document totals. - IRS — Standard mileage rates
https://www.irs.gov/tax-professionals/standard-mileage-rates
2026 mid-year rate change; date-aware dataset required. - U.S. DOL — Overtime pay
https://www.dol.gov/general/topic/wages/overtimepay
Basic federal overtime baseline; legal eligibility/regular-rate rules can be more complex. - QUIKRETE — Concrete Mix data sheet
https://www.quikrete.com/pdfs/data_sheet-concrete%20mix%201101.pdf
Example product yields; keep yield product-specific/editable.