Back to the catalog

Poshkan Paper Trading

Paper trading for AI: live quotes, indicators, and virtual trades on stocks, crypto, and forex.

Open source Repository Open in the app JSON README (API)

About

Paper trading for AI: live quotes, indicators, and virtual trades on stocks, crypto, and forex.

Details

Kind
MCP servers
Topic
Finance & crypto
Publisher
afrazja
Origin
official
Category
ferramentas
Transport
http
Version
1.0.0
Last push
2026-09-03T22:54:15Z
Repository state
ativo
Language
TypeScript
Added
2026-08-29 03:02:23
Updated
2026-08-29 03:02:23
Origin id
io.github.afrazja/poshkan

README

# Poshkan — Paper Trading

Risk-free US stock paper trading. Start with virtual cash, practice the market,
track holdings and P&L — no real money on the line.

> See [DESIGN.md](DESIGN.md) for the full product/architecture design.

## Stack

- **Next.js 16** (App Router) + **TypeScript** + **Tailwind CSS v4**
- **Supabase** — auth (with email confirmation), Postgres, Row-Level Security
- **Twelve Data** — primary quotes and OHLC history, proxied server-side
- **Yahoo Finance** — symbol discovery, news, quote enrichment, and automatic fallback
- **TanStack Query** — live quote polling

## Setup

### 1. Install dependencies

```bash
npm install
```

### 2. Create a Supabase project

1. Create a project at [supabase.com](https://supabase.com).
2. Open the **SQL Editor** and run the contents of [`supabase/schema.sql`](supabase/schema.sql).
   This creates the tables, RLS policies, the auto-profile trigger, and the
   trading RPC functions.
3. Run [`supabase/market-data-cache.sql`](supabase/market-data-cache.sql) to enable the shared,
   service-role-only Twelve Data candle cache.
4. In **Authentication → Providers → Email**, keep "Confirm email" enabled.
5. In **Authentication → URL Configuration**, set the production Site URL and add these exact
   redirect URLs (plus the equivalent URL for any other production hostname you serve):
   - `https://www.poshkan.com/auth/callback`
   - `http://localhost:3000/auth/callback`
6. Run [`supabase/google-auth.sql`](supabase/google-auth.sql) in the SQL Editor. This updates the
   profile trigger so social-auth users receive a non-email, collision-safe username.

### 2a. Enable Google sign-in

1. In the Google Auth Platform console, configure the OAuth consent screen and create an OAuth
   client with application type **Web application**.
2. Add your app origins under **Authorized JavaScript origins**, for example
   `https://www.poshkan.com` and `http://localhost:3000`.
3. Under **Authorized redirect URIs**, add the Supabase callback URL shown on the Supabase
   **Authentication → Providers → Google** page. It has this form:
   `https://YOUR-PROJECT-REF.supabase.co/auth/v1/callback`.
   This is the Supabase URL, not Poshkan's `/auth/callback` URL.
4. Copy the Google Client ID and Client Secret into Supabase's Google provider settings and enable
   the provider.

### 3. Get a Twelve Data API key

Sign up at [twelvedata.com](https://twelvedata.com) and copy your API key from
the dashboard. The free tier is rate-limited (~8 requests/min) — fine for dev.

### 4. Configure environment

Copy `.env.local.example` to `.env.local` and fill in:

```
NEXT_PUBLIC_SUPABASE_URL=https://YOUR-REF.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
TWELVE_DATA_API_KEY=your-twelve-data-key
TWELVE_DATA_CREDITS_PER_MINUTE=8
NEXT_PUBLIC_SITE_URL=http://localhost:3000
```

> The Twelve Data key is **server-only** — never prefix it with `NEXT_PUBLIC_`.

### 5. Run

```bash
npm run dev
```

Open [http://localhost:3000](http://localhost:3000).

## How it works

- **Auth** — users can continue with Google, or use email/password with email confirmation. Google
  returns through `/auth/callback`; email confirmation returns through `/auth/confirm`.
- **Accounts** — create multiple paper portfolios with starting cash and
  optional seeded holdings. Top up or reset cash anytime.
- **Trading** — search a symbol, then Buy / Sell / add to Watchlist. Trades fill
  at the live price (fetched server-side at execution) via an atomic Postgres
  RPC that validates cash and share balances (long-only, no margin).
- **P&L** — holdings show shares, avg cost, live price, day %, market value, and
  unrealized P&L in $ and %.

## Roadmap (v2)

Crypto & Forex asset classes, limit orders, transaction-history view,
account-value charts.

More