myspoti
Native Android client for Spotify, built with Jetpack Compose
Your personalized stream of AI, programming, GitHub trends, and engineering blog posts — curated for developers.
MediaTypeScript · CSSGitHub @jyotiram7402OnlineOwner 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
AI-powered developer news aggregation platform combining tech news, AI updates, GitHub trends, Hacker News, engineering blogs, and open-source discoveries into one personalized dashboard.
Taken from the repository README
Loading the full README.
Read the full README ↗An AI-powered, personalized news feed for developers. AI news · GitHub trending · Hacker News · engineering blogs · open-source launches — all in one beautiful dashboard.
Built with Next.js 14 (App Router) + TypeScript + Tailwind + shadcn/ui + Supabase + Vercel Cron. Runs end-to-end on free tiers.
/bookmarks and /settings routes.| Layer | Choice |
|---|---|
| Framework | Next.js 14 App Router |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS + shadcn/ui |
| Database | Supabase Postgres (free) |
| Auth | Supabase Auth (free) |
| Cron | GitHub Actions (free) — pings cron endpoints on schedule |
| AI summary | Hugging Face Inference API (free, opt-in) + rule-based fallback |
| Hosting | Vercel (free) |
No paid services. No vector DB. No OpenAI billing.
.
├── src/
│ ├── app/ # App Router pages, API, layouts
│ │ ├── api/
│ │ │ ├── articles/ # GET feed (paginated, filterable)
│ │ │ ├── auth/callback/ # Supabase OAuth callback
│ │ │ ├── bookmarks/ # User bookmarks
│ │ │ └── cron/
│ │ │ ├── rss/ # Hourly RSS ingestion
│ │ │ ├── github/ # 6-hourly GitHub trending
│ │ │ └── hackernews/ # 30-min HN top stories
│ │ ├── bookmarks/
│ │ ├── categories/[slug]/
│ │ ├── login/, register/, settings/, trending/
│ │ ├── error.tsx, loading.tsx, not-found.tsx
│ │ ├── sitemap.ts, robots.ts
│ │ ├── layout.tsx, page.tsx
│ │ └── globals.css
│ ├── components/ # Reusable UI (navbar, cards, widgets, ui/)
│ ├── services/ # rss / github / hackernews / articles
│ ├── utils/ # summarizer, classifier, feed-parser, format
│ ├── lib/ # supabase clients + constants + utils
│ ├── hooks/ # use-debounce, use-bookmarks
│ ├── providers/ # theme, supabase
│ ├── actions/ # server actions (auth)
│ └── types/ # article, database
├── supabase/
│ └── schema.sql # complete DB schema + RLS policies
├── .github/workflows/ # GitHub Actions cron triggers (free)
│ ├── cron-rss.yml # hourly RSS ingestion
│ ├── cron-hackernews.yml # 30-min HN ingestion
│ ├── cron-github.yml # 6-hour GitHub trending
│ └── keepalive.yml # weekly — stops GitHub auto-disabling the crons
├── middleware.ts # Supabase session refresh + protected routes
├── vercel.json # Vercel config — daily backup RSS cron
├── next.config.mjs
├── tailwind.config.ts
├── tsconfig.json
├── components.json # shadcn config
├── package.json
├── .env.example
└── README.md
This project is designed to be deployed without running anything on your machine.
Upload this folder to a fresh GitHub repository (drag & drop in github.com works fine).
supabase/schema.sql → run.Project URL → NEXT_PUBLIC_SUPABASE_URLanon public key → NEXT_PUBLIC_SUPABASE_ANON_KEYservice_role key → SUPABASE_SERVICE_ROLE_KEY (server-only, used by cron jobs)vercel.com → Add New → Project → import the GitHub repo.
Framework preset: Next.js (auto-detected).
Environment Variables — add the values from .env.example:
| Name | Example |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | https://abcdefgh.supabase.co |
NEXT_PUBLIC_SUPABASE_ANON_KEY | eyJ… (the anon key) |
SUPABASE_SERVICE_ROLE_KEY | eyJ… (the service-role key) |
CRON_SECRET | any long random string |
NEXT_PUBLIC_SITE_URL | https://<your>.vercel.app |
HUGGINGFACE_API_KEY | optional — HF token, or leave blank for rule-based summaries |
Click Deploy.
Vercel's Hobby plan only allows daily crons, so we use GitHub Actions instead. The workflows are already in .github/workflows/ and will run automatically once you add two secrets:
Go to your repo on GitHub → Settings → Secrets and variables → Actions → New repository secret
Add these two secrets:
| Name | Value |
|---|---|
SITE_URL | Your Vercel URL, e.g. https://devfeed.vercel.app (no trailing slash) |
CRON_SECRET | Same long random string you set in Vercel env vars |
That's it. The three workflows will start running on their schedules:
cron-rss.yml — every hourcron-hackernews.yml — every 30 mincron-github.yml — every 6 hoursYou can also trigger any of them manually: Actions tab → pick a workflow → Run workflow.
Two safety nets keep ingestion running even when the repo is quiet:
keepalive.yml — GitHub disables scheduled workflows after 60 days without a commit. This weekly workflow re-enables them through the API, so that never kicks in.vercel.json) — calls /api/cron/rss once a day as a backup. That also keeps the free Supabase project active (it pauses after 7 days without traffic). Vercel sends CRON_SECRET automatically.You don't have to wait an hour for the first cron tick. Easiest way: go to your GitHub repo → Actions tab → pick any of the three workflows → Run workflow. Do that for all three to populate every source.
Alternatively, hit the endpoints directly. If CRON_SECRET is set, you'll need to send it as a Bearer header:
https://<your>.vercel.app/api/cron/rss
https://<your>.vercel.app/api/cron/github
https://<your>.vercel.app/api/cron/hackernews
When CRON_SECRET is unset (e.g. for local testing), the routes are open — set it before going to production.
This is almost always the free-tier services going to sleep, not a code bug:
Ingest … workflow once (Run workflow) so fresh articles appear right away.src/utils/summarizer.ts exports a summarize() function:
HUGGINGFACE_API_KEY is set, try sshleifer/distilbart-cnn-12-6 via the Hugging Face Inference API. ~2-second timeout to keep cron fast.generateWhyItMatters() matches the title + summary against keyword rules to produce a short developer-facing rationale ("security teams should patch", "platform engineering shift", "AI tooling signal", etc.).
classify() in src/utils/classifier.ts assigns one of the 8 categories using regex rules over the title and content.
All three are zero-cost, deterministic, and run inside the cron job before upserting into Supabase.
If you ever want to run it locally:
git clone <your-repo>
cd <repo>
cp .env.example .env.local # fill in real values
npm install
npm run dev
App runs at http://localhost:3000. The cron endpoints can be hit manually at the URLs above.
src/lib/supabase/server.ts createServiceClient() and the cron route handlers.Authorization: Bearer $CRON_SECRET when the env var is set.zod.user_preferences.categoriesMade with care. No paid APIs were harmed in the making of this project.