Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Find jobs and internships in India across tech, sales, marketing, finance, healthcare and design, from first jobs to senior roles. Free resume match and interview prep.
BusinessTypeScript · JavaScriptGitHub @tinaaswaniiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
JobNetWork — jobs, internships, and career opportunities for students and freshers.
Loading the full README.
Read the full README ↗Stack: Next.js 14 (App Router) + Supabase (Postgres/Auth) + Vercel (hosting + cron) + Brevo (email alerts). Reasoning: it's the fastest path for a solo founder to a real production site — Supabase gives you a database, auth, and a dashboard without running your own server; Vercel gives you hosting + built-in cron for the email digest and price scrape jobs; both have generous free tiers.
app/
api/
jobs/route.ts -> proxies artha.link, merges in your own manually-added jobs
jobs/filters/route.ts -> proxies artha.link's filter option lists
cron/email-digest/route.ts -> sends the "new jobs matching your filters" email
cron/price-scrape/route.ts -> refreshes the scraped price/salary reference table
jobs/page.tsx -> the public listing page (filters + pagination + cards)
components/
JobCard.tsx, FilterBar.tsx, Pagination.tsx, EmailSignup.tsx
lib/
artha.ts -> artha.link API client with 429 backoff
supabase.ts -> Supabase server client
types.ts -> shared types
supabase/schema.sql -> tables for your own jobs, email subscribers, scraped prices
.env.example
npx create-next-app@latest already assumed — drop these files into that project (or npm install here once you add a package.json/tsconfig; this scaffold assumes Next 14 + TypeScript + Tailwind, all defaults from create-next-app).supabase/schema.sql in its SQL editor..env.example to .env.local and fill in real values.npm run dev locally, then push to GitHub and import into Vercel for a live URL (Vercel gives you yourproject.vercel.app immediately; add a custom domain in Vercel's dashboard whenever you buy one).vercel.json (included) so Vercel calls your digest and price-scrape endpoints on a schedule automatically — no server to babysit. Vercel's free Hobby plan only allows cron jobs to run once per day each — both are already set to once-daily (0 8 * * * and 0 9 * * *). If you upgrade to Pro later you can run price-scrape more often.Set ARTHA_API_KEY as a Vercel environment variable (Project Settings → Environment Variables), never in client code. Every call to artha.link happens inside app/api/jobs/route.ts, which runs on the server — the browser never sees the key. This also means you can rotate the key without redeploying your frontend.
I've stubbed this as a scheduled job (app/api/cron/price-scrape/route.ts) rather than building it in full, because it needs decisions only you can make:
robots.txt and Terms of Service before scraping it — some explicitly prohibit it, and a few (LinkedIn, Indeed) actively rate-limit or block scrapers and have pursued legal action against scrapers in the past. Safer sources: sites with an official API or open data feed, or sites whose ToS is silent/permissive on scraping.Retry-After/429s exactly like you do for artha.link.The stub uses cheerio for static HTML; if a target site needs JS rendering, swap in playwright (heavier, needs a different Vercel runtime — happy to wire that up once you pick sources).
components/EmailSignup.tsx collects an email + saved filters into the subscribers table. app/api/cron/email-digest/route.ts runs daily (see vercel.json), pulls jobs posted since each subscriber's last_sent_at, and sends via Brevo (set BREVO_API_KEY and a verified EMAIL_FROM; check it with /api/cron/email-check?key=CRON_SECRET). Swap in SendGrid/Postmark if you prefer; the calling code is a 10-line change.
https://<project>.vercel.app URL immediately.