# Redirection Plan — Dewemoji Pivot (2026) **Source of truth:** `dewemoji-direction-2026.md` (Feb 8, 2026) This document maps the **2026 pivot** (“personal emoji library + sync”) against what we have **already built** in the rebuild app, then defines a concrete redirection plan. --- ## 1) Pivot Summary (as confirmed) **New product north star:** - Dewemoji is a **personal emoji library**. - Users create private keywords in any language (including slang and non‑Latin scripts), sync across devices, and **own their vocabulary**. - Public discovery remains free (EN/ID + semantic) as a growth engine. - No public/community submissions → no moderation burden. **Monetization shift:** - Free: public search only. - Paid: private keyword library + sync + API keys + dashboard. - Rename **Pro → Personal**. --- ## 2) What We’ve Already Built (Current State) ### ✅ Built & aligned - Public emoji discovery (JSON dataset, EN + ID keywords). - API endpoints: `/v1/emojis`, `/v1/categories`, `/v1/emoji`, `/v1/health`. - Frontend search + browse + emoji detail pages. - Basic SEO + sitemap + robots. - License verification/activation endpoints (legacy‑style) and supporting services. - The rebuild is already cache‑first (`app/data/emojis.json`). ### ⚠️ Built but **misaligned** with pivot - **License‑based Pro system** (Gumroad/Mayar validation). - **Device activation** + license tables intended for legacy Pro (not Personal plan). - “Pro” pricing page and marketing copy (old pricing, old narrative). - API docs + support pages referencing license key flow. ### ❌ Not built yet (required by pivot) - User accounts (register/login/session). - Personal tier subscription model (Stripe + subscriptions table). - API key management tied to user (generate/revoke). - Private keyword CRUD (user keywords table). - Personal dashboard (keywords, API keys, billing). - Extension account linking + private keyword sync. - Public endpoint whitelisting (origin + extension UA) + soft throttling. --- ## 3) Directional Conflicts to Resolve | Area | Current | Pivot Requirement | Decision | |------|---------|------------------|----------| | Monetization | Pro license keys | Personal subscription | **Replace** license key system with account + API key model | | Identity | None | User accounts | **Add** auth system + dashboard | | Keywords | Public only | Private per user | **Add** `user_keywords` + blended search | | API Access | License key | User API keys | **Replace** authorization method | | Community | Planned public contributions | Private‑only | **Remove** community feature scope | | Pricing | $3/mo + $27/yr + $69 lifetime | $4.99/mo + $49/yr + $99 lifetime | **Update** pricing + copy | --- ## 4) Redirection Plan (Phased) ### Phase A — Foundation (Backend) ✅ *Start here* Goal: replace license model with **account + API key** architecture. **Backend tasks** - Add tables: `users`, `user_api_keys`, `user_keywords`, `subscriptions`. - Add auth endpoints: - `POST /v1/user/register` - `POST /v1/user/login` - `POST /v1/user/logout` - Add API key endpoints: - `GET /v1/user/apikeys` - `POST /v1/user/apikeys` - `DELETE /v1/user/apikeys/:key` - Add private keyword endpoints: - `GET /v1/keywords` - `POST /v1/keywords` - `DELETE /v1/keywords/:id` - Add `GET /v1/search?private=true` to **blend private + public** results. - Implement **origin/UA whitelist** for public endpoints and soft throttling. **What to freeze** - Legacy license endpoints stay online temporarily but **deprecated**. - No new features on Gumroad/Mayar flow. --- ### Phase B — Dashboard UI (Web) Goal: provide a **personal workspace** for private keywords and API keys. **Frontend tasks** - Add `/register`, `/login`, `/dashboard`. - Dashboard tabs: - **My Keywords** (CRUD, bulk import/export) - **API Keys** (generate/revoke) - **Billing** (plan status, upgrade links) - Update emoji detail page: - “Add to My Keywords” for Personal users. - Show personal keywords for this emoji (if any). --- ### Phase C — Extension Integration Goal: enable personal keywords in extension + sync. **Extension tasks** - “Link Account” flow in extension. - Store API key in `chrome.storage.sync`. - Include `Authorization: Bearer dew_…` header when logged in. - Blend private + public results. - Upgrade prompt on missing keyword: “Create this in Personal?” --- ### Phase D — Payments + Plan Rename Goal: Personal tier + billing system. **Billing tasks** - PayPal subscription plan (Monthly/Annual) + webhook handler. - Keep pricing **admin‑controlled** (see Admin Dashboard plan). - Webhooks → populate `subscriptions`. - Plan rename everywhere: **Pro → Personal**. - Pricing page update. --- ### Phase E — Deprecate Legacy Licenses Goal: cut off old Gumroad model cleanly. **Migration tasks** - “Paste license → auto‑create account → grant Personal (lifetime)” tool. - Email existing license users. - Sunset date for legacy validation. --- ## 5) Immediate File Updates (Recommended Next) - Update **API docs** to mention account/API keys (not licenses). - Update **Pricing page** to Personal tier and new price points. - Update **Support/Terms/Privacy** copy with Personal tier language. - Update **community-plan.md** (already aligned with private‑only direction). --- ## 6) Risk Notes - The pivot **removes public contribution features** and their associated moderation burden. This is consistent with the new revenue model but changes the original story. Make sure homepage and extension copy reflect **personal library** first. - Referrer whitelist + soft throttle is required to keep free endpoints open without abuse. - **Public unlimited usage** should only be granted to **real extension installs**. Plan: use Chrome Verified Access / `chrome.identity.getCertificationToken()` to prove the request is from a legitimate Web Store install before allowing unlimited public access. - **Private keywords + sync** always require **user authentication** (magic‑link/OTP) — no exceptions. --- ## 7) Quick Comparison Snapshot **What we should keep:** - Public emoji search + dataset caching. - Site UI/SEO baseline. - API response contract (minus license semantics). **What we should replace:** - Gumroad/Mayar license verification. - Pro/lifetime license activation. - Community submissions/voting. **What we should add:** - User accounts + API keys. - Private keyword library + sync. - Dashboard + billing. --- ## 8) Decision Checkpoints Before coding Phase A, confirm: 1. **Plan name** is officially “Personal” (not Pro). 2. **API key format** (`dew_…`) accepted. 3. Public endpoints remain unlimited for **dewemoji.com + extension**. 4. Stripe is the primary payment provider. --- If you want, I can immediately convert this into a task checklist by repo folder (backend, web, extension) and start Phase A scaffolding.