Looty
Looty is a free, self-hosted workspace: kanban boards, collaborative documents, a calendar, your mailbox and projects, with apps for Android, Linux and Windows that work offline.
Discover your Skill N Success Score, close your skill gaps, and unlock ATS-ready CVs, role matches and a 30-day action plan.
ProductivityGitHub @Deb052024OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A real, working backend for the Skill N Success platform: assessment persistence, versioned scoring, AI-generated Success Plans (Claude), and an optional Razorpay checkout — plus the marketing site, served as one deployable app.
→ To go live on skillnsuccess.com, see DEPLOY.md. That file has the exact GitHub → Render → GoDaddy DNS steps. This README covers what the app does and how to run it locally.
Set ENABLE_PAYMENTS=false (the default) and the pricing section shows a
waitlist capture instead of a checkout button — real emails get saved,
nothing breaks, and you don't need Razorpay or Anthropic keys to launch.
Flip ENABLE_PAYMENTS=true later, once those keys are ready, and the same
button becomes a live Razorpay checkout with no code changes.
| Piece | Status |
|---|---|
| Assessment start/resume/answer/complete | Working now, no keys needed |
| Scoring engine (versioned, deterministic) | Working now, no keys needed |
| Dashboard aggregation | Working now, no keys needed |
| Waitlist capture | Working now, no keys needed |
| Razorpay checkout | Code is correct and tested against bad/missing config — dormant until ENABLE_PAYMENTS=true + real keys |
| AI Success Plan generation (Claude) | Code is correct — gated behind a paid entitlement, so also dormant until payments are on |
| User auth | Simplified to email-only for MVP (no password/OTP). Fine for a soft launch |
cd skillnsuccess-backend
npm install
cp .env.example .env # then fill in real values (see below)
npm start # serves API + frontend at http://localhost:8080
Razorpay (dashboard.razorpay.com → Account & Settings → API Keys)
rzp_test_...https://YOUR_DOMAIN/api/checkout/webhook, subscribed to payment.captured
and order.paid. Copy the webhook secret into RAZORPAY_WEBHOOK_SECRET.rzp_live_...) only once you've tested a full test-mode
payment end to end.Anthropic (console.anthropic.com → API Keys)
ANTHROPIC_API_KEY.src/ai/anthropic.js explicitly forbids
inventing facts not present in the user's own profile/answers.Full step-by-step (GitHub → Render → GoDaddy DNS) is in DEPLOY.md. Short version: push to GitHub, connect the repo on Render, add two DNS records in GoDaddy — no nameserver changes needed.
Scaling note: SQLite is fine for MVP/early traffic. When you outgrow a single file (roughly hundreds of concurrent users), swap
src/db.jsfor Postgres — the SQL is plain enough that the migration is mostly mechanical.
POST /api/assessment/start { name, email, source? } → { assessment_id, user_id, resumed, answers }
POST /api/assessment/:id/answer { questionIndex, optionIndex } → { ok: true }
GET /api/assessment/:id → { assessment, answers }
POST /api/assessment/:id/complete { profile? } → { overall, dimensionScores, version }
GET /api/assessment/:id/score → latest score row
POST /api/waitlist { email, assessmentId? } → { ok: true }
POST /api/checkout/create-order { assessmentId, couponCode? } → { order_id, razorpay_order_id, amount, currency, key_id } (503 if payments disabled)
POST /api/checkout/verify { razorpay_order_id, razorpay_payment_id, razorpay_signature } → { ok: true }
POST /api/checkout/webhook (raw body, x-razorpay-signature header) → { received: true }
POST /api/generation/:assessmentId/generate → { job_id, status } (requires active entitlement)
GET /api/generation/:assessmentId/result → { status, artifact }
GET /api/dashboard/:assessmentId → { assessment, score, entitlement_active, generation_status }
GET /api/config → { paymentsEnabled }
GET /api/health → { ok: true }