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)