What We Built
At ShellHacks 2026, our team built MomentumX, a trading dashboard that combines a large-cap momentum scanner, tokenized US stock trades on Solana, and a transparent performance journal.
The idea started with a question: what would investing look like for someone who wants exposure to US markets but faces geographic, banking, or brokerage barriers?
MomentumX follows a demo investor. They connect a Phantom wallet, receives 1,000 dUSD in demo dollars, watches a scanner for unusual market activity, and buys or sells tokenized stocks. Every trade appears in a portfolio dashboard with holdings, realized and unrealized profit and loss, average wins and losses, an account-value chart, and a link to the transaction on Solana Explorer.
Because the market was closed during most of the hackathon and judging, we built a replay engine around real minute-by-minute market data from Friday, September 25, 2026. The replay covers 19 stocks from 7:00 AM through 4:15 PM ET and can run at up to 600× speed or jump directly to the next signal.
Our scanner watches for two conditions:
- Price momentum of at least +3% from the previous close
- Relative volume of at least 2× the stock's normal pace
When momentum appears, MomentumX begins surfacing relevant company news in ten-minute intervals. On our replay day, the real data produced alerts for AKAM and DDOG at the opening bell and MSFT eleven minutes later.
Under the hood, the flow looks like this:
market replay → momentum scanner → signal and news → trade ticket
→ Phantom signature → backend co-signature → Solana devnet
→ trade ledger → portfolio analytics
The frontend is built with React, TypeScript, Vite, Three.js, and Solana's wallet adapter. A FastAPI backend manages the replay clock, scans the market, builds transactions, and calculates portfolio statistics. SQLite is the accounting source of truth, while Solana executes and verifies each trade.
For the hackathon demo, we created dUSD and one mock SPL token for each supported stock. These tokens have no monetary value. A production version could route eligible users to real tokenized-stock liquidity, such as xStocks through Jupiter, while preserving the same discovery, execution, and analytics experience.
The biggest lesson was that a financial interface needs more than a working buy button. It needs to explain why an opportunity appeared, make transaction state unambiguous, survive retries without trading twice, and show users whether their decisions actually worked.
Demo
- Devpost for video, screenshots, and more insight: Devpost link
- Source code: github.com/FastMartini/Shellhacks-2026
- Network: Solana devnet
- Walkthrough: Connect Phantom in Testnet Mode, get 1,000 dUSD, start the replay, jump to a signal, place a trade, and open the resulting transaction in Solana Explorer.
One detail we especially like is that the market data is real even though the assets are demo tokens. Selecting a stock opens its underlying Alpaca price and volume history, with line and candlestick views that never reveal data from later than the replay clock. That made the demo feel like a real trading session instead of a scripted slideshow.
Partner Technologies
Solana
Solana is the execution layer for MomentumX. Every buy and sell is a real devnet transaction, not a row inserted after an animation.
We designed a vault that owns the mint authority for dUSD and the 19 demo stock tokens. When a user buys a stock, the transaction burns dUSD from the user's wallet and mints the corresponding stock token. A sell performs the reverse operation. Both sides happen atomically in one transaction, so we cannot debit one asset without crediting the other.
The signing flow was one of the most technical parts of the project:
- FastAPI prices the order at the current replay minute and builds an unsigned transaction with a fresh blockhash.
- The React app asks Phantom to sign it.
- The backend verifies that the signed message exactly matches the quote it created.
- The backend adds the vault signature, pays the network fee, submits the transaction, waits for confirmation, and records it in the ledger.
The vault pays the fee so a first-time user does not need SOL before trying the experience. We used @solana/web3.js and Solana Wallet Adapter in the browser, plus the Python solana and solders libraries in the backend. Helius provided our Solana devnet RPC connection.
We also made submission idempotent. If the browser loses the response or devnet stops answering halfway through a trade, the client retries the same quote. Before sending anything again, the backend checks whether the original signature landed. That prevents a flaky connection from creating a duplicate trade.
Market-data and application stack
MomentumX loads historical SIP minute bars from Alpaca and company news from Finnhub into SQLite. The live application then runs entirely from that local replay dataset, which keeps the demo deterministic and prevents third-party API limits from interrupting judging.
FastAPI gave us a clean way to separate replay, scanner, portfolio, and vault endpoints. React and Vite let us poll the market and portfolio independently, while Three.js powers the animated token scene on the landing page.
Hackathon Experience
We built MomentumX at ShellHacks 2026 at Florida International University. Our team was Khalil Peguero, Diego Martinez, Matthew, and Justin Cardenas. We divided the project into four connected tracks: backend and portfolio accounting, scanner and frontend, Solana execution and replay data, and setup, slides, and submission.
Our effective build window was only about eleven hours. We gave ourselves two checkpoints: land one Phantom-signed trade on devnet by 6:00 PM, then complete the full connect → fund → buy → sell → trade log → total P/L loop by 10:30 PM. The complete loop landed at 10:35 PM.
Then came the collection of bugs that felt very much like 3:00 AM:
- Phantom showed a red simulation warning for our devnet test tokens even though Solana's own simulation passed and the transactions confirmed. We tested several transaction layouts, learned exactly what the wallet was changing, added explicit compute-budget instructions, and built the warning into our honest demo explanation.
- Our first SQLite connection strategy started returning intermittent 500 errors when the UI polled portfolio and transaction endpoints every two seconds. Moving to one connection per thread with WAL mode took a concurrent test from dozens of failures to zero.
- A copied Helius URL pointed at mainnet while all our mints lived on devnet. The RPC key was valid on both networks, which made the mistake look like a token or vault bug until we inspected the hostname.
- We had to think through the worst moment for a trading app: the transaction may have landed, but the client never received the response. That led to our stored quotes, retry-safe submission flow, and chain verification before any resend.
The atmosphere was a mix of hurried meals, wallet popups, and teammates jumping into whichever part of the critical path was blocked. Our favorite moment was not adding one more feature; it was watching the entire loop finally work end to end and knowing that the scanner, wallet, chain, ledger, and dashboard were all telling the same story.
We left ShellHacks with a much better understanding of Solana transaction construction, wallet signing, market systems, average-cost portfolio accounting, and the less glamorous reliability work that turns a demo into a product people can trust.
Top comments (0)