📋
Tasks
Live across all terminal sessions · 36 open
6 in progress30 pending111 done
Destroy vps2 entirely (not resize)
DO doesn't support downsize so destruction is only path. vps2 has: apples-agent (blue:4142 green:4143, CRITICAL — agent.apples.live points here), alan (:4096), apples-clients/ (32 dirs, legacy file path), askcraig nginx vhost, snap-apples-live nginx vhost (stale). Sequence: install apples-agent on vps1 → ufw allow 4142/4143 → vps1 nginx vhost for agent.apples.live → certbot SSL → DNS repoint → 24h monitor → destroy vps2. Tab-snap migration on 4030 is separate (tab-snap is on vps1, not vps2).
f11ce840· in_progress
UI-port 4030 content to apples (nikitarogers333) + log friction
Use headless browser as nik on apples.live/nikitarogers333. Recreate each 4030 user-facing item (folders, notes, links) by going through the actual user flow. Log every friction point + bug. Fix the small ones inline, defer big ones. End with a punchlist + a friend-ready apples account.
f11ce840· in_progress
Generate 10 SEO articles for askcraig top metros
Use Claude CLI to write 10 evergreen articles targeting top-intent queries in NYC/LA/Chicago/Houston × handyman/plumber/electrician/HVAC/cleaner. Save to /root/projects/askcraig/articles/, commit, push, deploy.
67f4eb4e· in_progress
Add JSON-LD schema to apples.live via layout Script
Use next/script in app/layout.tsx to inject Organization/WebSite JSON-LD globally + per-page schemas via metadata.other. Bypasses security hook on dangerouslySetInnerHTML.
67f4eb4e· in_progress
Submit apples.live to AI directories (auto)
Submit to theresanaiforthat.com, futurepedia.io, AlternativeTo, AItoolsdir, aibase.com via web forms (POST programmatically with apples.live metadata). Save submission receipts.
67f4eb4e· in_progress
Build cold-email list: 500 Miami small businesses
Scrape Google Maps places API or biz registry for 500 Miami small businesses (5-50 emp). Pull email + name + business name + industry. Save CSV at /root/email-campaigns/miami-smb-v1.csv.
67f4eb4e· in_progress
Migrate per-feature SQLite DBs to Supabase Postgres
notes-meta.db, nikita-platform/data.db, askcraig-reddit/data.db, alan_dashboard.db, permits.db. Schema + data dump per DB, table per feature, rewrite query callers.
59837237· pending
Move keys333 reads → Vercel env vars
apples-staging, posthog-dashboard, integrations all read /root/keys333 directly. Identify exact key list, set as Vercel env vars, swap reads to process.env.
59837237· pending
Build vps1-proxy for inherently-local services
Thin HMAC-authed Express proxy on vps1: forwards to /opt/meet-bot:4099, /opt/tab-snap, /opt/apples-agent (vps2). Used only for stateful workers that can't move to Vercel.
59837237· pending
Copilot context dropdown: per-user isolation + source from user's notes/tabs
Phase 1 (LEAK BLOCKED, 2026-05-15): /api/context-files now requires HMAC user token + scoped to /opt/apples-clients/<userKey>/wiki/. Selection state per-user (selections/<userKey>.json). All buildPrompt callers pass session.userKey. Old /opt/meeting-copilot/contexts/*.md + /root/projects/* PROJECT.md no longer exposed. Phase 2 (TODO): userKey is an apples-DB UUID, not a slug — so wiki dir lookup currently misses for all users. Need UUID → slug resolution via apples Supabase to actually populate per-user notes. Plus optional: list user's tabs (client_custom_tabs).
59837237· pending
Google-OAuth signup doesn't create integration_portals row
app/api/auth/google/callback/route.ts inserts user + clients but skips integration_portals row. Result: connect-api-key returns 404 'Portal not found' for any Google-signup user (Lauren, nikitarogers777, etc.). Mirror the signup/route.ts insert: tx.insert(schema.integrationPortals).values({ client_slug, client_id, required_providers: DEFAULT, welcome_message }).
59837237· pending
Wire per-section L2 previews (askcraig pilot, expand to apples/oranges/etc)
SubTabCard now accepts preview prop. Each platform L2 page builds preview specs per section (header card + items + counts) and passes to PlatformGrid → SubTabCard → TilePreview. Start with askcraig.
59837237· pending
Migrate live SQLite routes to Postgres
Remaining sqlite routes that have callers and need migration to Supabase: /api/track/event, /api/track/summary (behavior tracking — used by BehaviorTracker.tsx + admin console), /api/console/leads (LeadsTable), /api/integrations/plaid/exchange + /refresh (PlaidConnect), /api/pack/[token]/track + /enrich (outreach pack tracker via lib/pack-tracker.ts). Schema-only sqlite DB currently lets them build but they're ephemeral on Vercel — data won't persist between cold starts.
f11ce840· pending
Inventory + plan vps2 takedown
Map every apples-side dependency on vps2 (apples-agent, tab-snap, file-based per-client wikis, sync timers, env file, websocket endpoints), pick replacement targets (Vercel functions vs Cloud Run vs small persistent box), produce migration plan with cutover order.
f11ce840· pending
Migrate apples-agent vps2 → vps1
Step 1 of vps2 destruction. Copy /opt/apples-agent from vps2 → vps1. Install blue (4142) + green (4143) systemd units. ufw allow 4142/4143. nginx vhost agent.apples.live → 4143. certbot SSL. DNS repoint agent.apples.live A record from 178.128.145.98 → 45.55.169.94. Monitor 24h before vps2 teardown.
f11ce840· pending
Decide fate of alan service on vps2
alan (:4096 "Services Marketplace") runs at /root/projects/alan on vps2. Check: is anything calling it? If unused → delete. If used → migrate to vps1.
f11ce840· pending
4030: viewport zoom flash after nav (folder→home or terminal→home)
After navigating from /f/<id> or /t/<session> back to / on 4030, page briefly allows horizontal scroll + zoom out, then snaps to mobile view. Likely cause: viewport meta missing maximum-scale OR content briefly exceeds viewport during hydration. Check layout.tsx viewport tag + globals.css body overflow-x. Add maximum-scale=1, user-scalable=no.
f11ce840· pending
Marketing expansion — multi-platform unified system
Build out /opt/marketing into full cross-platform marketing engine. Phase 1: phone notification on new draft + tap-posted + Bluesky writer + unified counts tile. Phase 2: LinkedIn/FB/IG writers (free OAuth). Phase 3: Resend/Loops/Crisp/Attio third-party integrations (free tiers).
f11ce840· pending
Tear down apples on vps1 (after 24h stable)
Wait 24h after DNS cut with no errors. Stop apples + callflow systemd on vps1. Disable. Keep code + DB for 7 days then remove. Restore TTL on apples.live A record.
f11ce840· pending
Phase 2: tab.yaml manifest schema + layered filesystem
Define tab.schema.json, write manifest discovery (glob + dedup), migrate 4030 to layered FS layout (workspaces/nik/), move Nik's iframe tabs (claude-usage, digitalocean, nikipedia) to manifest-only YAML. Validate via staging at /opt/apples-staging/. ~2 weeks.
f11ce840· pending
Phase 3: Layer resolution (L0/L1/L2) + maxLayer admin toggle
L0/L1/L2 path resolution in nginx + Next.js middleware. maxLayer toggle for admin shell (apples.live/admin sees only firmware). Per-workspace Git for time travel. Move 4030 from staging to production layered FS. ~1 month.
f11ce840· pending
Phase 4: Skills + LLM Council + apples CLI prototype
x-context tag emission + skill auto-loading on tab navigation. LLM Council tab type (uses karpathy/llm-council prompts verbatim). apples-cli prototype — parallel deploy mode of same code, packages tab_contract.py + manifest discovery + skills as installable CLI. ~quarter.
f11ce840· pending
Apples → Vercel: rewrite proxies for vps1 leads + vps2 apples-agent
Apples on Vercel needs to call out for: leads/emails (vps1 still owns red-apples scraper) + chat (vps2 still runs apples-agent with claude -p). Build new API routes on Vercel that proxy to those backends, or update nginx on vps1+vps2 to expose the needed endpoints over HTTPS.
f11ce840· pending
L2 chrome buttons + composer parity on apples
User reports L2 pages (e.g. /[slug]/library, /[slug]/drafts) still show old chrome (translucent buttons, no white card backing). Need to apply the white-square chrome pattern there too.
f11ce840· pending
Smart preview for external link tiles (favicon + hostname)
Apples folder link tiles + 4030 link tiles currently show a generic chain icon. Replace with favicon (s2/favicons fallback) + hostname so the tile reads like the actual destination.
f11ce840· pending
Chrome inline in tile header (drop bottom reserve, fill tile)
Move @ + 📁 buttons into the tile's header card as inline elements on the right. Drops the 42px footer reserve so preview content fills the whole tile, eliminating both card-on-card overlap AND wasted empty space.
f11ce840· pending
Default tabs: expand rows to show full content + action buttons
User: L2 default tabs (Library/Drafts/Briefing/Recipes) look like preview tiles — content clamped, no actions. Make each row tappable to expand full content + add per-row action buttons (Send/Edit/Run now/etc).
f11ce840· pending
Send-while-busy: queue prompts instead of disabling send
Claude Code pattern. User can keep typing + sending while agent is generating. New prompts queue; drain on each "result" event.
f11ce840· pending
Improve internal linking on both sites
Add 3-5 contextual internal links per page with keyword-rich anchors. Apples: link city pages to industry pages and to /audit. Askcraig: link city/service pages to top blog articles.
67f4eb4e· pending
[NEEDS NIK] Sign up Smartlead, Apollo, HARO/Featured
Smartlead $94/mo, Apollo $59/mo, HARO/Featured.com free. Save creds in keys333. Confirm sender DNS for Smartlead inboxes.
67f4eb4e· pending
[NEEDS NIK] Google Business Profile (askcraig + apples)
Create GBP listings at business.google.com. Postcard verification (~5 days). Once verified, AI submits per-city listings via API.
67f4eb4e· pending
[NEEDS NIK] G2/Capterra/Crunchbase signups
B2B directories require company-rep verification. Sign up apples.live on each, fill in basics, AI takes over content/screenshots.
67f4eb4e· pending
Generate 10 SEO articles for apples.live
Write 10 articles via Claude CLI for apples.live (cold-niche AI use cases). Save to /root/projects/LLM/web/content/blog/ as MDX. Add app/blog/[slug]/page.tsx to render. Build, restart, verify indexable.
67f4eb4e· pending
[NEEDS NIK $30] Approve cold-email burner domain purchase
Domains cost $4-12 each via Namecheap. Need 3-5 = $30-60. Pausing until Nik confirms spend. Once approved I register via API + auto-config DNS (A, MX via ImprovMX free forwarding, SPF, DMARC).
67f4eb4e· pending
Submit askcraig.org to local citation directories
Submit askcraig business profile to: Manta, Yellow Pages (free), Foursquare, Apple Business Connect (web form prep), Bing Places (web form prep). Save receipts.
67f4eb4e· pending
Set up SMTP/Smartlead alternative on VPS for cold sends
Either use SendGrid (already have key) or self-host Postal/Mailgun-style sender for cold emails from burner domains. Configure SPF/DKIM. Send 25/day/inbox.
67f4eb4e· pending