SNIPE CLUB
Docs

Documentation

How the local desk, the commerce back end and the optional bridge fit together.

Install (customers)

Ordinary customers use the Windows portable build — no Python or Git. See the download page: unzip SnipeClub-windows-portable.zip and double-click FCTradingDesk.exe. Builds are unsigned until code signing is purchased.

Data is stored in %LOCALAPPDATA%\FCTradingDesk\data. The desk binds to 127.0.0.1 only.

Install (developers / from source)

Requires Python 3.11+.

py -3 -m pip install -e .
py -3 -m eafc
# then open http://127.0.0.1:8765

Do not expose the local server to the internet without an authenticated reverse proxy.

Using the desk

  • Data centre: import CSV price observations. A synthetic demo dataset is available and is labelled SYNTHETIC_DEMO_DO_NOT_USE_AS_REAL.
  • Opportunities: ranks cards by discount to fair value and liquidity from the data you imported.
  • Paper trading: 20 portfolios, each starting at zero. Add simulated capital yourself.
  • Research lab and System health: strategy analysis and event log.

EA account journal

Account slots hold a nickname and a status that you assert (CREATED, WEB_READY, MARKET_UNLOCKED, RESTRICTED). Balances and completed trades are user-reported and are never treated as verified by EA. The journal does not touch paper balances.

Optional browser bridge (experimental)

Violates EA rules. The bridge drives the open-source MagicBuyer-UT engine in your browser. EA prohibits autobuyers. Using it risks bans, and its behaviour on live FC accounts has not been verified by this project. It is disabled unless you pair it explicitly with a local token.

You must sign in to EA yourself in your own browser; the desk never sees your EA credentials. Activity reported by the browser worker is stored as unverified.

Accounts, entitlements and billing (back end)

The eafc.commerce Python package provides the SaaS plumbing. It is implemented and tested, but no public service is deployed.

ModulePurpose
authRegistration, login, 30-day sessions, password reset, email verification, deletion requests. Passwords are PBKDF2-HMAC-SHA256 hashed; tokens are stored only as hashes.
entitlementsServer-side access check: status active or trialing and not past expires_at.
billingStripe-compatible checkout, idempotent webhooks, cancellation, refunds. Sandbox by default; live keys are refused unless explicitly approved.
supportTickets. Customers only see their own; admins see all.
adminFounder metrics (customers, MRR from stored payment amounts, failed payments, cancellations, tickets, app versions). Requires the admin flag.

Configuration

VariableMeaning
EAFC_DATA_DIRWhere the SQLite database lives.
EAFC_PRICE_MONTHLY_CENTS / EAFC_PRICE_SEASONAL_CENTSExample prices in minor units (defaults 1999 / 4999).
EAFC_SEASONAL_DAYS / EAFC_MONTHLY_DAYSLength of a paid period (defaults 120 / 30).
STRIPE_SECRET_KEYUnset = mock sandbox. A test key uses Stripe test mode. A live key is blocked.
STRIPE_WEBHOOK_SECRETRequired to accept webhooks whenever a Stripe key is set.
EAFC_LIVE_PAYMENTS_APPROVEDOperator override that must stay unset until a processor has approved the business.

Known limits

  • Email delivery is not implemented; verification and reset tokens must be delivered by the operator.
  • The static pages need a web endpoint for /api/commerce/* to be wired to the Python modules. Until then the forms report that the service is not connected.
  • Terms and privacy text are drafts.
  • Third-party market data has its own terms and accuracy limits.