Alshorty ยท The Bible
// URL Shortener. Link-in-Bio. SmartPages. One key, three products.
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
V2 โ†’ V3 Migration
Product Pillars
3 live
URL Shortener ยท Link-in-Bio ยท SmartPages, one API key
Loadingโ€ฆ0%
๐ŸŽฏ Today's Mission
Loadingโ€ฆ
๐Ÿ’ธ AI Spend (month)$0
โค๏ธ Platform Healthโ€”
๐Ÿšฆ Release Ready0 / 3
๐Ÿ” Critical Security Closed0 / 0
๐Ÿ•“ Recent Activity
  • No activity yet โ€” tick a task to get started.
๐ŸŽฏ
The honest position, restated: SmartPages is an entire third product with zero mentions in the last known technical doc (dated May 11, 2026) โ€” it was built afterward and is fully live today. Geo-targeting, retargeting pixels, and A/B split testing were all still listed as "future" in the old tracker; all three are confirmed shipped and PRO-gated in the actual redirect code. Meanwhile real Pro pricing (โ‚น399/mo, $8/mo) is fully built but currently shown as $0 โ€” a deliberate choice, not a gap. Read the panels here as ground truth, not the old docs.
โœ… Shipped Since the Last Known Doc โ€” Verified From Code
  • SmartPages โ€” an entire third product (routes/pages.js, 828 lines). 15 block types, drag-and-drop, free tier live on homepage. Zero mentions in the May 11 technical doc.
  • Link-in-Bio Prominence Upgrade โ€” the May doc describes this as "Active." It's now fully shipped: free tier (1 page, 5 links) live on the homepage as a first-class product, not buried behind Pro.
  • A/B split testing, geo-targeting redirects, and retargeting pixels (FB/GA/GTM) โ€” all three were listed as "Tier 1 future" in the old tracker. All three are confirmed live and PRO-gated in links.js and redirect.js.
  • Currency/pricing bug fully fixed โ€” usePricing() v3.1.0, single backend source of truth, geo-aware INR/USD split, session-cached, zero hardcoded prices anywhere in the frontend.
  • 6 alternatives pages (Bitly/Rebrandly/TinyURL/Linktree/Short.io/Carrd), /developers (68KB) with a full interactive API playground, /documentation (95KB).
  • RFC 9116 security.txt, honeypot traps, Google Safe Browsing integration, 30+ phishing regex patterns, zero-tolerance CSAM detection.
๐Ÿ“ The Core Question
๐Ÿ“
Before building any new feature: is this genuinely new capability, or does it already exist in links.js/redirect.js and just needs a frontend UI to expose it? geo_rules, device_rules, ab_variants, and pixels all already have backend support โ€” several "future" ideas may just be missing an edit-modal UI, not backend work.
Alshorty โ”‚ โ”œโ”€โ”€ Core (auth, KV/D1/R2, admin-config โ€” DONE) โ”œโ”€โ”€ URL Shortener (links.js โ€” A/B, geo, pixels all live โ€” MOSTLY DONE) โ”œโ”€โ”€ Link-in-Bio (free tier live, first-class product โ€” DONE) โ”œโ”€โ”€ SmartPages (undocumented 3rd product, SSR pending โ€” MOSTLY DONE) โ”œโ”€โ”€ Analytics (D1 clicks, IP-hash privacy โ€” DONE) โ”œโ”€โ”€ Free Tools (QR/UTM/LinkChecker/OGChecker โ€” DONE) โ”œโ”€โ”€ Admin Console (bootstrap-protected, audit_log โ€” DONE) โ”œโ”€โ”€ Marketing Site (6 alternatives, /developers, blog โ€” MOSTLY DONE) โ”‚ โ””โ”€โ”€ Monetization (real pricing built, shown as $0 โ€” DECISION PENDING) โ””โ”€โ”€ custom domains, teams, webhooks โ€” genuinely NOT STARTED
๐Ÿงญ The Strategic Shift
Alshorty is a 3-in-1 bundle, not a URL shortener with side features.
URL Shortener + Link-in-Bio + SmartPages, one login, one API key, one price (currently $0). The actual competitive wedge isn't out-featuring Bitly or out-designing Linktree individually โ€” it's that a user would otherwise pay for Bitly AND Linktree AND a landing-page tool separately, and Alshorty bundles all three free.
โš ๏ธ The Open Question This Tracker Answers
โ“
The last technical doc is dated May 11, 2026 and has zero mentions of SmartPages โ€” an entire product built afterward. The old tracker still listed geo-targeting, retargeting pixels, and A/B testing as "Tier 1 future, build next" when all three are confirmed live and PRO-gated in the real redirect code. This tracker is grounded in the code and the live site, not the historical docs โ€” treat any future planning doc as secondary to what links.js and redirect.js actually say.
๐Ÿ“Š Wrong Metric vs Correct Metric
Track outcomes, not activity. A signed-in link or a real click-through on a bio page is the actual unit of value โ€” not a page view or an anonymous link that expires in 60 days.
Instead of trackingTrack thisWhy it matters
Links createdLinks created by signed-in usersAnonymous links expire in 60 days and never become a relationship
Bio/SmartPage viewsBio/SmartPage โ†’ click-through on an embedded linkA bio page that gets views but no clicks isn't doing its job
Total signupsSignups who create a 2nd link/page in the same weekOne-and-done signups don't indicate product-market fit
โ€”Free users who hit their monthly capThe real signal for whether Pro pricing has pull once switched on
โ€”Abuse reports / links removed per weekA rising trend is a real cost and risk signal, not just a checklist line
๐Ÿท๏ธ Revenue Model โ€” Real, Built, Currently Disabled
Full pricing infrastructure exists in constants.js and works end-to-end via Razorpay. Pro is shown as $0 on the live site today โ€” a deliberate growth-phase choice, tracked as an open decision on the Business & Revenue panel.
TierAccessPrice
Anonymous2 links max, 60-day expiry, no signupFree
Free (signed in)50 links/mo, 1 bio page (5 links), 1 SmartPage (8 blocks)โ‚น0 / $0
Pro โ€” currently $010,000 links/mo, 5 bio pages, 10 SmartPages, A/B testing, geo-targeting, pixelsBuilt: โ‚น399/mo ยท $8/mo ยท โ‚น3,999/yr โ€” shown as $0
๐Ÿ“
Standing rule for every decision: if a system could be reused by more than one product (Shortener, Bio, SmartPages), it belongs in Core. If it's specific to one product's logic, it lives inside that product's own route file and data shape.
1
One login, one API key, one price for all three products
A user experiences Alshorty as one bundle, never as three separate tools requiring separate accounts or separate keys.
2
KV for the hot path, D1 for relational data โ€” a deliberate split, not a compromise
Links live in KV specifically for sub-50ms redirect latency. Don't "fix" this by migrating to D1 โ€” it would make the core product slower to solve a problem that doesn't exist yet.
3
No hardcoded prices anywhere in the frontend
usePricing()/useUsdPricing() read a single backend source of truth. Any new priced feature must follow this pattern โ€” update constants.js and every surface updates automatically.
4
Abuse prevention runs on every link, every time, no exceptions
Phishing regex, Google Safe Browsing, honeypot traps, IP bans โ€” this layered defense is what makes a free, no-signup-required shortener safe to operate. Never let a new creation path (e.g. a future bulk-import) skip it.
5
IP is stored as a hash, never raw โ€” this is marketing copy, not just an engineering choice
"Privacy-first, GDPR-safe by design" is a genuine differentiator vs. GA4-based competitors. Keep it true on every new analytics surface, and say it out loud in marketing.
6
File Version headers and inline change notes on every edit โ€” this discipline pays for itself
It's exactly what made rebuilding this tracker from the codebase alone possible. Keep bumping the version and writing what changed, every time.
7
Runtime config (app_config) must actually be enforced, not just saved
A known, named gap: the admin panel can save a config value the worker doesn't read yet. Don't let this drift โ€” an admin who changes a limit and sees nothing happen loses trust in the whole panel.
8
Check the code before writing "future" โ€” several "future" ideas are already half-built
geo_rules, device_rules, ab_variants, and pixels all exist on the link object schema already. A "new" feature idea might just be a missing UI, not new backend work โ€” check before scoping it as a bigger job than it is.
9
Pro pricing at $0 is a decision, not a default โ€” document the trigger for changing it
Don't let "we'll turn it on eventually" become "we never decided." A number (user count, cost pressure, funding need) beats a vibe.
10
Full Bitly/Linktree feature parity is explicitly not the goal
Compete on the 3-in-1 bundle, the generous free tier, and India-first pricing โ€” not on matching every enterprise line item a much larger competitor has.
Confirmed live: magic-link + Google/Microsoft OAuth, 7-day sessions, D1 users table, app_config for runtime settings. Known gap: worker-side enforcement of app_config changes.
๐Ÿ” Identity & Authentication
Magic-link auth โ€” 15-min token expiry, 5/15min rate limit per email
CRITICAL
Google OAuth + Microsoft OAuth, both confirmed working in production
HIGH
7-day sessions in AUTH_SESSIONS KV, httpOnly cookies
CRITICAL
API key auth โ€” SHA-256 hash + display prefix, never stores raw key
HIGH
๐Ÿ—„๏ธ Storage Architecture
5-namespace KV split โ€” SHORTY_LINKS, SHORTY_RATE, SHORTY_LIMITS, AUTH_TOKENS, AUTH_SESSIONS
CRITICAL
D1 schema โ€” users, clicks, api_keys, audit_log, app_config, thin links table (migration 0004)
CRITICAL
R2 bucket for bio images โ€” content-type + size validated, no egress fees
HIGH
โš™๏ธ Admin-Editable Config
app_config table โ€” pricing.*, limits.* editable at runtime via /__admin/config
HIGH
Default config values seeded correctly (pricing, limits) on fresh install
MEDIUM
Worker actually reads and enforces app_config changes at runtime, not just saves them
HIGHNamed gap โ€” flagged directly, not yet closed
๐Ÿ”’
Known gap, called out directly: the admin config panel saves to app_config in D1, but runtime enforcement in the worker was flagged as an outstanding issue. Don't treat any app_config value as authoritative in new code until this is confirmed closed.
๐Ÿชœ The Spine
๐Ÿ”ง Support Modules (parallel, non-blocking)
Uses These Systems
๐Ÿ”— Core Shortening
Create/list/edit/delete links, custom aliases (5/mo free, 100/mo Pro)
CRITICAL
4 domain prefixes โ€” /link (free default), /s /go /run (Pro-only)
HIGH
Password protection, expiry by date or max-click count
HIGH
QR code generation on every link, free on all plans
HIGH
UTM parameter builder integrated into link creation
MEDIUM
Bulk shortener UI (Bulk.tsx) โ€” one at a time confirmed, CSV import still pending
MEDIUM
๐ŸŽฏ V3 Advanced Targeting โ€” Confirmed Live, PRO-Gated
A/B split testing โ€” ab_variants[] with weighted random selection, per-variant click tracking in redirect.js
HIGHWas listed as "future" in the old tracker โ€” confirmed live
Geo-targeting โ€” geo_rules[] routes by country, up to 10 rules per link
HIGHWas listed as "future" โ€” confirmed live
Device targeting โ€” device_rules{} routes mobile/desktop/tablet separately
HIGH
Retargeting pixels โ€” fb_pixel_id, ga_id, gtm_id fired on redirect
HIGHWas listed as "future" ($35/mo feature on Bitly) โ€” confirmed live
๐Ÿ›ก๏ธ Security on Link Creation
30+ phishing regex patterns + Google Safe Browsing API check on every link
CRITICAL
Blocked shortener domains, TLDs, malware/paste-dump domains, honeypot traps
CRITICAL
๐Ÿšง Remaining for This Pillar
Bulk CSV import/export โ€” currently 1-at-a-time only in the Bulk UI
MEDIUM
Link expiry notification emails โ€” 3 days before expiry, cron job not yet built
MEDIUM
Uses These Systems
๐Ÿงฌ Core Bio Builder โœ“ Live
Free tier live โ€” 1 bio page, 5 links, no Pro guard, homepage hero section
CRITICALThe exact upgrade the May 11 doc described as in-progress
Profile + avatar, 8 themes, gradient/image/accent-color backgrounds
HIGH
Block types โ€” link, youtube, spotify, soundcloud, text, contact form, section headers
CRITICAL
Click & view analytics โ€” countries, devices, per-link stats
HIGH
QR code included, print-ready instant download
MEDIUM
Built-in contact form / email capture
MEDIUM
Pro tier โ€” up to 5 bio pages, 20 links/page, custom slug, image upload, verified badge
HIGH
๐Ÿšง Remaining for This Pillar
Bio OG meta tags (og:title, og:image, og:description) on bio-page.js template
HIGHWas "in progress" in the May doc โ€” verify actually shipped
Auto-detect social platform icons in bio links (expand detectIcon())
LOW
"Store" mode โ€” sell products/services directly via Razorpay Payment Link, 0% commission
LOWRazorpay already integrated โ€” this is a UI layer, see Future Modules
Uses These Systems
๐Ÿงฑ Page Builder โœ“ Live
Drag-and-drop block builder โ€” free tier 1 page / 8 blocks, Pro 10 pages / unlimited blocks
CRITICAL
15 block types โ€” hero, headline, text, image, video, buttons, countdown, social_proof, features, testimonials, faq, form, embed, logo, divider, spacer
CRITICAL
Slug availability check, publish instantly at /p/slug
HIGH
Page analytics + CTA click tracking per block ID
HIGH
Password protection on free tier
MEDIUM
Pro โ€” custom CSS, tracking pixels (FB/GA4/GTM/TikTok), remove branding, form blocks
HIGH
Image upload to R2 for page assets, content-type validated
MEDIUM
๐Ÿšง Remaining for This Pillar
Worker SSR at /p/* for SEO โ€” currently client-rendered, invisible to crawlers that don't execute JS
CRITICALDirectly undercuts SmartPages' value prop as a landing-page/SEO tool
Templates gallery โ€” 10 pre-built templates to reduce blank-page friction
MEDIUM
Form block โ†’ Resend lead capture wiring, confirmed end-to-end
MEDIUM
โš ๏ธ
The single highest-leverage open item across all three products: SmartPages SSR. A landing-page builder that search engines can't see defeats its own purpose โ€” this was already flagged as pending in the last known roadmap snapshot and should be the first thing closed.
๐Ÿ“ˆ Coverage
Country, city, device, browser, OS, referrer, UTM breakdown per click
CRITICAL
IP stored as SHA-256 hash only โ€” never raw, GDPR-safe by design
CRITICAL
Shared page_views pattern reused across bio pages and SmartPages
HIGH
7-day analytics on Free, full history + CSV export on Pro
HIGH
Public stats endpoint (/api/public/stats) โ€” links_today, links_total, 300s KV cache
MEDIUM
๐Ÿšง Remaining
Click heatmap by hour/day, Looker Studio connector โ€” both still on the future list
LOW
๐Ÿ› ๏ธ Coverage
QR Code Generator โ€” free QR for any URL, PNG/SVG download
HIGH
Link Checker โ€” URL safety / redirect health check
HIGH
OG Checker โ€” Open Graph tag preview for any URL
MEDIUM
UTM Builder โ€” campaign tracking URL generator
MEDIUM
๐Ÿšง Remaining
Each tool's /tools/ and /features/ variant confirmed as genuinely distinct copy, not near-duplicate content
MEDIUM
๐Ÿ”‘ Coverage
Single API key covers URL Shortener, Link-in-Bio, and SmartPages endpoints
CRITICAL
120 req/min general, 20 req/min auth endpoints, documented rate limits
HIGH
Interactive playground pre-fills code snippets with the user's real API key
HIGH
๐Ÿšง Remaining
API playground kept in sync as new endpoints ship
MEDIUM
Rate-limit headers surfaced in API responses so integrators can self-throttle
LOW
๐Ÿ’ณ Core Billing โœ“ Live
Razorpay Create-Order flow, INR at the gateway (India-only constraint)
CRITICAL
Geo-aware USD/INR pricing hook, v3.1.0 โ€” single backend source, no hardcoded prices
CRITICAL
payment.captured webhook wired to renderProWelcomeEmail via ctx.waitUntil
HIGH
payment.refunded webhook handled
HIGH
๐Ÿšง Remaining / Decisions
Pro pricing actually switched on from $0 to real pricing (โ‚น399/mo, $8/mo)
HIGHDecision pending โ€” see Business & Revenue
Annual billing (โ‚น3,999/yr / $80/yr) live alongside monthly
MEDIUMSequence immediately after bl5
๐ŸŽ›๏ธ Coverage
Bootstrap-protected first-admin creation โ€” requires ADMIN_SECRET, blocks if any admin exists
CRITICAL
User management โ€” view/search/suspend, is_disabled flag
HIGH
Pricing/config manager โ€” app_config editable without redeploy
HIGH
audit_log โ€” every admin action recorded with actor, action, target, timestamp
HIGH
/__admin/stats โ€” includes SmartPages stats (folded in per v1.0.3 change note)
MEDIUM
Disabled-user โ†’ links cascade โ€” flagged as an open item ("410 cascade fix") in the last known roadmap
MEDIUM
๐Ÿšง Remaining
audit_log actually reviewed periodically, not just written and forgotten
LOW
๐Ÿ  Core Pages โœ“ Live
Homepage, pricing, about, blog architecture
CRITICAL
6 alternatives pages โ€” Bitly, Rebrandly, TinyURL, Linktree, Short.io, Carrd
HIGH
4 "for" pages โ€” India, Agencies, Creators, Marketers
MEDIUM
/developers (68KB) with interactive API playground + /documentation (95KB)
HIGH
Public status page (/status) โ€” monitors Shortener, Bio, Analytics, QR, API, Cloudflare Edge
HIGH
3 Arabic-localized pages โ€” /ar/url-shortener, /ar/link-in-bio, /ar/landing-pages
MEDIUM
Legal โ€” Privacy, Terms, Cookie Policy, DMCA, Security, Report Abuse, all public
HIGH
Cookie consent banner, GDPR-compliant
HIGH
๐Ÿšง Remaining
Blog cover images โ€” real image files, flagged as a still-open blocker on AdSense submission
HIGH
AdSense submission + GA4 setup โ€” sequenced right after ms9
MEDIUM
โš ๏ธ
The platform's #1 named gap: runtime enforcement of app_config changes in the worker. The admin panel can save a value the worker doesn't actually read yet โ€” close this before treating any config value as authoritative.
๐ŸŽฏ
The bar: a feature is not "done" until verified on the live Worker via wrangler tail or a real curl check โ€” local success and production success are different bars, confirmed by the exact class of bug (broken QR/routing from stale index.js) that already happened once during the V2โ†’V3 migration.
๐Ÿ“‹ Tracked Tasks
Custom domain for PRO โ€” links.yourbrand.com via Cloudflare Custom Hostnames API
HIGH
Team/Workspace plan โ€” shared links, Admin/Member/Viewer roles
HIGH
Chrome Extension โ€” right-click "Shorten with Alshorty", Manifest v3
MEDIUM
Referral / affiliate program โ€” recurring revenue share per Pro referral
MEDIUM
Click-event webhooks (Zapier/Make/n8n) โ€” distinct from the existing Razorpay payment webhook
MEDIUM
AI Smart Slug โ€” memorable slugs from destination content via Workers AI
MEDIUM
QR code customization โ€” logo overlay, custom colors, SVG/PDF export
MEDIUM
Deep Link routing โ€” iOS App Store / Android Play Store specific URLs
LOWdevice_rules today is desktop/mobile/tablet only, not store-specific
โœ… Marketing Action Checklist
โš ๏ธ
The one item that undercuts everything else here: SmartPages is not server-rendered at /p/*. A landing-page product invisible to crawlers is the single highest-leverage SEO fix on this entire list โ€” see the SmartPages panel.
โœ… SEO Action Checklist
๐Ÿ’ณ Plan Tiers
โœ… Business Action Checklist
๐Ÿ“
The core question: could more than one product (Shortener, Bio, SmartPages) reuse this in the next 12 months? YES โ†’ Build in Core. NO โ†’ Build inside that product's own logic.
Feature Ownership
FeatureOwnerLocationNotes
Authentication (magic-link, OAuth, sessions)Coreworker/src/routes/auth.jsv1.0.2 โ€” every product imports this
Pricing / configCoreworker/src/config/constants.jsSingle source of truth, app_config overrides at runtime (enforcement gap noted)
KV storage architectureCore5 namespacesSHORTY_LINKS holds link, bio, AND page objects โ€” shared namespace, distinct key prefixes
R2 image storageCorealshorty-bio-images bucketUsed by Bio today; SmartPages image blocks likely reuse the same bucket
Abuse prevention (phishing scan, Safe Browsing, honeypots)Coreworker/src/utils/security.jsv1.0.3 โ€” runs on every link/bio/page creation, not product-specific
Link shortening + redirect logicShortenerroutes/links.js, routes/redirect.js1,253 + 376 lines โ€” the largest, oldest module
Bio page builder + renderingBioroutes/links.js (shared file), templates/bio-page.jsNot a separate route file โ€” lives inside links.js
SmartPages block builder + renderingSmartPagesroutes/pages.jsv1.0.0 โ€” the newest, least documented product
Analytics (clicks table)Core (Analytics)routes/analytics.jsShared D1 table + query pattern across all 3 products
PaymentsCoreroutes/payments.jsOne Razorpay flow covers Pro across all 3 products, not per-product billing
โš ๏ธ
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