Finance-first MarketFilter for macro, commodities, equities, and crypto intelligence.
- React + Vite client
- Express + TypeScript API
- Postgres + Drizzle ORM
- Hourly scheduler with
node-cron - OpenAI summarization with top-k gating and cache reuse
- Public account creation (email/password) + invite links for team onboarding
- Email/password login with roles (
admin,member) - Personal + shared topics with windows (
24h,7d,30d) - One-click setup for recommended free finance sources
- One-click starter topic pack (macro, commodities, equities, crypto)
- Custom dashboard with draggable/resizable cards, templates, glow states, and live prices
- Portfolio positions, alert rules, event calendar, watchlist heatmap, and source-trust controls
- Google News RSS + custom RSS ingestion
- Precision-first vetting (
market impact + keyword match + freshness + source trust) - Top 15 vetted candidates/topic/run, summarize top 5
- In-app inbox only (no outbound email)
npm install
Copy-Item .env.example .env
npm run db:push
npm run devOpen http://localhost:5173.
Set in .env:
SEED_ADMIN_EMAILSEED_ADMIN_PASSWORD
On first startup, admin account is created automatically if missing.
DATABASE_URLSESSION_SECRETAPP_BASE_URLOPENAI_SUMMARY_MODELOPENAI_API_KEY(optional; fallback extractive summaries if omitted)
npm run dev- API + client in developmentnpm run check- Typechecknpm test- Unit/integration test suitenpm run build- Frontend buildnpm run start- Start server (tsx runtime)npm run start:render- Push DB schema, then start production servernpm run db:push- Push Drizzle schema to Postgres
Use this one-click Blueprint link:
https://render.com/deploy?repo=https://github.com/infotradescout/MarketFilter
- Push this project to a GitHub repo/branch.
- In Render, create a new Blueprint and point it at that repo (Render reads
render.yaml). APP_BASE_URLis auto-derived from Render'sRENDER_EXTERNAL_URL; only set it manually if you use a custom domain.- Log in with your seeded admin account, then create invites from Admin.
- Auth:
POST /api/auth/login,POST /api/auth/register,POST /api/auth/logout,POST /api/invites/accept - Admin:
GET /api/admin/users,GET /api/admin/invites,POST /api/admin/invites - Topics:
GET/POST/PATCH/DELETE /api/topics,POST /api/topics/:id/backfill - Watch topics:
GET/POST/PATCH/DELETE /api/watch-topics - Feeds:
GET/POST/PATCH/DELETE /api/feeds - Inbox/jobs:
GET /api/inbox,POST /api/inbox/:itemId/read,GET /api/jobs/latest - Dashboard:
GET /api/dashboard/data,GET/PUT /api/dashboard/layout,GET /api/market/prices - Portfolio:
GET/POST/PATCH/DELETE /api/portfolio - Alerts:
GET/POST/PATCH/DELETE /api/alerts,GET /api/alerts/triggered - Calendar/preferences:
GET /api/calendar/upcoming,GET/PUT /api/preferences