Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
BIST hisselerini tarayın, teknik analiz sinyallerini ve yapay zeka açıklamalarını görün.
Translation pending
FinanceTypeScript · JavaScriptGitHub @Doguserkivac09OnlineOwner 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
BistAiProject
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
AI-assisted market analysis for Borsa İstanbul equities. Real-time price data, technical charting, and plain-language signal explanations generated by a language model. 🔗 Live: bistai.vercel.app · 🇹🇷 Türkçe README Retail investors in Turkey have plenty of places to see a stock's price. What they don't have is anywhere that tells them what the numbers mean.Read the full README ↗
AI-assisted market analysis for Borsa İstanbul equities. Real-time price data, technical charting, and plain-language signal explanations generated by a language model.
🔗 Live: bistai.vercel.app · 🇹🇷 Türkçe README
Retail investors in Turkey have plenty of places to see a stock's price. What they don't have is anywhere that tells them what the numbers mean.
Open any brokerage app and you get RSI, MACD, moving averages, volume profiles — a wall of abbreviations with no interpretation. The information is technically present and practically useless to anyone who hasn't spent years learning to read it.
BistAI keeps the indicators and adds the missing layer: a short, readable explanation of what a given signal implies, written in Turkish, generated per stock.
Not investment advice. BistAI is an educational and analytical tool. It does not recommend buying or selling any security.
| Feature | Detail |
|---|---|
| Real-time BIST data | Price, volume and OHLC series pulled from Yahoo Finance's chart API |
| Interactive charting | Candlestick and line views via TradingView's lightweight-charts |
| AI signal explanations | Technical conditions passed to Claude, returned as plain-Turkish commentary |
| Personal watchlist | Per-user, persisted, isolated by row-level security |
| Guest mode | Browse without an account; AI assistant disabled, nothing persisted |
| Auth | Email/password, Google and Apple OAuth via Supabase |
flowchart TB
subgraph client["Browser"]
UI["Next.js App Router<br/>React Server + Client Components"]
CHART["lightweight-charts<br/>candlestick / line"]
end
subgraph server["Server (Vercel)"]
RSC["Server Components<br/>initial data fetch"]
API["Route Handlers<br/>/api/*"]
end
subgraph external["External services"]
YF["Yahoo Finance<br/>v8 chart API"]
CLAUDE["Anthropic API<br/>claude-haiku-4-5"]
end
subgraph data["Supabase"]
AUTH["Auth<br/>email · Google · Apple"]
DB[("PostgreSQL<br/>watchlists · signals")]
RLS["Row Level Security<br/>user_id = auth.uid()"]
end
UI --> RSC
UI --> API
CHART -.reads.-> UI
RSC --> YF
API --> YF
API --> CLAUDE
API --> DB
UI --> AUTH
AUTH --> DB
DB --- RLS
style CLAUDE fill:#0B6E9E,color:#fff
style RLS fill:#C4166F,color:#fff
The key boundary: the browser never talks to Yahoo Finance or Anthropic directly. Both run behind route handlers, so no third-party key is ever shipped to the client.
These are the choices that took the longest, and why they went the way they did.
The obvious implementation — call the Anthropic API from a client component — leaks the key to anyone who opens DevTools. Every model call goes through a server route handler instead. ANTHROPIC_API_KEY has no NEXT_PUBLIC_ prefix, which means Next.js will refuse to bundle it into client code even by accident.
Watchlists are private. The naive approach filters by user in the query (where user_id = ...) and trusts every code path to remember. One forgotten where clause leaks every user's data.
Instead the policy lives in the database:
create policy "own_watchlist" on watchlists
for all using (auth.uid() = user_id);
Now a query that forgets to filter returns zero rows rather than everyone's rows. The failure mode is "broken", not "breached" — which is the correct direction for a security bug to fail.
Financial charts look simple and are not: crosshairs, time-axis gaps for non-trading hours, log scales, responsive redraw. lightweight-charts handles all of it in ~40 KB gzipped. Writing this by hand would have cost a week and produced something worse.
Generating a two-sentence explanation of an RSI reading does not require deep reasoning. Using a Haiku-class model (claude-haiku-4-5) keeps latency low and cost per explanation negligible. The prompt does the heavy lifting; the model doesn't need to.
Stock pages are read far more often than they're interacted with. Fetching initial price data in a server component means the user sees real numbers on first paint instead of a loading skeleton, and search engines see actual content.
lightweight-chartsclaude-haiku-4-5)git clone https://github.com/Doguserkivac09/BistAi.git
cd BistAi
npm install
Create .env.local:
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
ANTHROPIC_API_KEY=your-api-key
NEXT_PUBLIC_APP_URL=http://localhost:3000
Apply the database schema — this creates the tables and their RLS policies. The app will not work correctly without the policies:
psql "$SUPABASE_DB_URL" -f supabase/schema.sql
Then:
npm run dev
Open http://localhost:3000.
Guest mode uses Supabase anonymous sign-in, which is off by default on new projects. Turn it on in the Supabase dashboard under Authentication → Providers → Anonymous sign-ins, or the guest button returns 422.
app/
(auth)/ sign-in, sign-up, callback routes
api/ route handlers — market data, AI explanations
stocks/[symbol]/ stock detail page (server component)
components/
charts/ lightweight-charts wrappers
ui/ shadcn/ui primitives
lib/
supabase/ browser and server clients
market/ Yahoo Finance fetch + normalisation
supabase/
schema.sql tables, indexes, RLS policies
Stated plainly, because pretending they don't exist helps nobody:
MIT