DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證An AI-powered platform that helps professionals organize their experience, showcase projects, and build a credible online presence.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗AI-powered portfolio builder that publishes instantly at slug.liveportfolio.site
Turn your CV or raw experience into a live, professional portfolio in 5 minutes.
slug.liveportfolio.siteslug.liveportfolio.site)sent_flows JSONB — each email sent exactly once/api/analytics/latest-visit endpoint every 30 seconds while the tab is visible, pauses in the background and refreshes on return. Only the latest view's country and time are returned; clicks do not count as visits. This replaces dashboard Realtime pop-ups and does not require changing RLS or enabling browser access to analytics rows. Free/Basic do not receive visitor details.seo_title and seo_description per portfoliosupabaseAdmin (service role) server-side only — never in client bundleBrowser
↓
Caddy (port 80/443, auto-SSL) — 46.225.186.103
↓
Next.js app (port 3001)
↓
Supabase / OpenAI / Paystack / Resend
Subdomain routing — middleware.ts reads the Host header on every request:
liveportfolio.site → main app (landing, form, dashboard, API)liveportfolio.site/slug → rewrites to /portfolio/[slug] (short links)slug.liveportfolio.site → rewrites to /portfolio/[slug]/
├── middleware.ts ← routing brain — do not break
├── app/
│ ├── page.tsx ← landing page
│ ├── create/page.tsx ← 4-step form
│ ├── preview/[portfolioId]/page.tsx ← preview + payment
│ ├── portfolio/[slug]/page.tsx ← public portfolio renderer
│ ├── dashboard/page.tsx ← user dashboard (analytics, editing)
│ ├── blog/ ← SEO blog articles
│ └── api/
│ ├── generate/route.ts ← form data → AI → portfolio JSON
│ ├── parse-cv/route.ts ← PDF → structured JSON
│ ├── update/route.ts ← dashboard edits (no AI)
│ ├── paystack-webhook/route.ts ← payment confirmation + plan upgrade
│ ├── subscribe/route.ts ← capture non-paying user email
│ ├── check-slug/route.ts ← real-time slug availability
│ ├── analytics/route.ts ← view count (batch flush)
│ ├── analytics/event/route.ts ← click event tracking
│ ├── analytics/summary/route.ts ← dashboard analytics data
│ ├── score/route.ts ← AI career score (7-day cache)
│ ├── unsubscribe/route.ts ← one-click unsubscribe
│ ├── cron/drip/route.ts ← email drip cron (CRON_SECRET protected)
│ ├── admin/metrics/route.ts ← daily health-check data
│ ├── user-plan/route.ts ← plan status check
│ ├── delete-account/route.ts ← GDPR account deletion
│ └── health/route.ts ← { status: 'ok' }
├── components/templates/
│ ├── Minimal.tsx ← editorial minimalism (white, teal accent)
│ └── Bold.tsx ← dark engineering showcase (navy, blue accent)
├── lib/
│ ├── supabase.ts ← client + admin instances
│ ├── prompts.ts ← AI system prompt + banned word list
│ ├── ipinfo.ts ← IPinfo Lite enrichment (company, country)
│ ├── email-drip.ts ← all email templates (Flow A, B, C)
│ └── schema.sql ← Supabase table definitions
├── scripts/
│ └── health-check.sh ← daily VPS health email
└── ecosystem.config.js ← PM2 config (port 3001)
| Table | Purpose |
|---|---|
users | Auth + plan (unpublished / pro) + slug |
portfolios | Portfolio content (JSONB), health score, SEO fields, view count |
payments | Payment records (Paystack reference, idempotency) |
subscriptions | Recurring subscription tracking (basic / pro plan + expires_at) |
analytics_events | Per-view and per-click events (ip_hash, company, country, referrer) |
career_scores | AI career score cache (7-day TTL per portfolio) |
email_subscribers | Drip email list + sent_flows JSONB deduplication |
| Route | Method | Purpose |
|---|---|---|
/api/generate | POST | AI portfolio generation (1 per user lifetime) |
/api/parse-cv | POST | PDF → structured JSON |
/api/update | PATCH | Dashboard content edits (no AI) |
/api/paystack-webhook | POST | Payment confirmation, plan upgrade |
/api/subscribe | POST | Capture non-paying user email |
/api/check-slug | GET | Slug availability check |
/api/analytics | POST | View count batch flush |
/api/analytics/event | POST | Click event tracking |
/api/analytics/summary | GET | Dashboard analytics (ownership-checked) |
/api/score | GET | AI career score (7-day cache) |
/api/unsubscribe | GET | One-click unsubscribe |
/api/cron/drip | GET | Email drip runner (CRON_SECRET header) |
/api/admin/metrics | GET | Health check metrics (ADMIN_METRICS_SECRET) |
/api/user-plan | GET | Current plan status |
/api/delete-account | POST | GDPR account deletion |
/api/health | GET | { status: 'ok' } |
git clone https://github.com/cliffordnwanna/liveportfolio
cd liveportfolio
npm install
cp .env.local.example .env.local
# fill in your keys
npm run dev
NEXT_PUBLIC_ROOT_DOMAIN=liveportfolio.site
NEXT_PUBLIC_APP_URL=https://liveportfolio.site
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY= # server-side only
OPENAI_API_KEY=
NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY=
PAYSTACK_SECRET_KEY= # server-side only
NEXT_PUBLIC_USD_TO_NGN_RATE=1400
RESEND_API_KEY=
ADMIN_METRICS_SECRET= # protects /api/admin/metrics
CRON_SECRET= # protects /api/cron/drip
IPINFO_TOKEN= # IPinfo Lite — 50k lookups/month free
Push to main → GitHub Actions:
npm install on VPS (ARM64 native binaries)VPS: 46.225.186.103 · App port: 3001 · PM2 process: liveportfolio
See docs/VPS_Security_Runbook.md for security monitoring.
/api/generate checks DB before calling OpenAI. Never remove this check.supabaseAdmin is server-side only — never import in client components or pages.header_up Host {host} in Caddyfile. Without it, subdomain routing breaks./api/update — no AI, no cost. Never call /api/generate for edits.| Plan | Price | Key features |
|---|---|---|
| Launch | $9 one-time | Live portfolio, both templates, watermark removed |
| Professional | $19 one-time | Everything + custom domain |
Target: $300/month = ~16 Professional sales/month.
Owner: Clifford Nwanna / Ecotronics Enterprise, Lagos Nigeria
Domain: liveportfolio.site (Namecheap, active until May 2027)