I run the node, ingest the data, write the APIs, ship the UI and operate execution bots. This is the evidence—including the parts where I'm not the strongest fit.
No generic portfolio. No “exceptional engineer” paragraph. Open the evidence and decide.
I OWN + OPERATE2×Hyperliquid nodes I own and run today: mainnet + testnet
TEAM RESULT$700m+Felix TVL during my time leading frontend
CORE BUILDER2 engineersbuilt the core of Moralis Streams
CORE BUILDER1.8k★Web3UIKit — principal contributor and maintainer with 238 public contributions
01
WHY PROPR, SPECIFICALLY
I want to stay in Hyperliquid. I do not want to stay comfortable.
I tell every recruiter the same thing: my next role should keep me in the Hyperliquid ecosystem. I just do not want to spend the next few years rebuilding the same product in a different wrapper. Propr lets me bring what I already know into prop trading—a business I genuinely want to understand.
01 · HYPERLIQUID / LONG TERM
I want to compound here.
Hyperliquid is not just a logo in Propr's stack; it is the venue underneath a much larger prop-firm product. I already run nodes, bots, data pipelines and trading products around it. My next job should make that context compound.
02 · PROPR / FIRSTHAND
The product clicked when I used it.
I watched Louis explain that the first priority was getting the Hyperliquid experience right, then opened a free demo and tried the challenge myself. I did not expect prop-firm rules, risk and incentives to be this interesting—but the product clicked.
03 · THE ROOM / GROWTH
I want the uncomfortable learning curve.
I deliberately look for rooms where other people know far more than I do. I grow when I have to earn context, ask better questions and become useful outside my comfort zone.
WHY I WANT IT
I can be useful on day one around Hyperliquid and engineering. The parts I do not know yet—prop risk and operations—are exactly why I want to be there. Propr builds in public, so this page does the same: evidence, plus the gaps I will not pretend away.
02
CURRENT / END TO END
I own the boundaries, not only one box.
A Hyperliquid event begins at my node. I deliver it through a low-latency data layer, persist and aggregate it, expose it through a typed API, then consume it in a live trading product.
01
I OWN + OPERATE
My Hyperliquid node
Mainnet + testnet infrastructure I own and operate today; node-adjacent delivery.
02
I OWNED
Block + event delivery
gRPC streams and low-latency ingestion into typed services.
03
I OWNED
ClickHouse
Raw logs, materialized views, aggregation and replayable history.
04
I OWNED
Mute NestJS API
REST, SSE, API keys, metering, webhooks and operational controls.
05
I OWNED
Next.js trading product
Live market state, wallet signing, builder codes and finished UX.
MONOREPO ≠ MONOLITHI OWNED
BUN / TURBO / TYPESCRIPT / RUST / SOLIDITY
One repository for systems that have to change together.
My interconnected Hyperliquid products and infrastructure live in one monorepo. It is a real dependency graph, not several folders under one root. Unrelated projects stay separate. The repository is a coordination boundary—not a deployment boundary—so each service can still ship and fail independently.
Deployable apps
Rust block + gRPC services
Felix liquidator
HIP-4 + Mute APIs
Parlay relay + maker fleet
Shared packages
ClickHouse client
WebSocket event contracts
HIP-4 SDK + UI primitives
Parlay taker + maker SDKs
Task graph
Dependency-aware builds
E2E after dependencies build
Filtered local development
Coordinated Bun, Cargo + Foundry gates
A trading invariant changes once across SDK → API → WebSocket → UI
Shared contracts reduce version drift across consumers
Turbo limits TypeScript builds to the affected graph
Applications remain independently deployable
RUNTIME STACK / CURRENTI OWN + OPERATE
AWS · CLOUDFLARE · CONVEX
I choose the boundary before the vendor.
All of my current Hyperliquid VMs run on AWS. Cloudflare manages the public edge. Convex is an intentional shortcut when reactive product state matters more than owning every piece of backend plumbing.
01STATEFUL CORE
AWS
Every Hyperliquid instance I run is on AWS.
Nodes, ClickHouse, ingestion, APIs, liquidators and supporting services run on EC2. Latency-sensitive node, data and execution paths sit in Tokyo; S3 archives, SSM deploys, SNS alerts and EBS snapshots surround the runtime.
EC2 / TOKYOS3 + EBSSSM + SNS
02DOMAINS + EDGE
CLOUDFLARE
The public edge stays separate from the machines.
My domains and DNS live on Cloudflare. Workers run application surfaces, read proxies, push relays and external sentinels; Tunnel fronts EC2 origins, Access gates admin surfaces and R2 serves public generated media behind the edge.
DNS + TUNNELSWORKERSR2
03FAST REALTIME SCAFFOLDS
CONVEX
Sometimes less backend is the better backend.
For a new product surface, I sometimes use Convex because reactive queries keep the frontend live without first building pub/sub plumbing. I keep custom services where latency, replay, analytics or execution control justify them.
REACTIVE QUERIESFAST ITERATIONSELECTIVE USE
THE RULE
Critical execution and replay stay explicit. Convenience is welcome where it is easy to replace.
REAL-TIME
The hard part is not drawing these boxes. It is deciding what happens on a reconnect, a duplicate event, stale state or a failed cutover. My systems include replay, targeted refresh, response diffing and explicit degraded paths.
SUPPORTING PRODUCTION DEPTHREPLAY + DELIVERY
The hard problems repeat across systems.
Reorgs, duplicates, retries, backpressure and rebuildable projections show up whether the source is Moralis, HyperEVM or Hyperliquid. This is the production history underneath my current stack.
PRODUCTION EVENT SOURCING
SOURCE → LOG → PROJECTION
HYPERLIQUID / CURRENTI OWN + OPERATE
I use the same model now.
I source HyperEVM block history to reconstruct Morpho positions and surface risky accounts. Separately, I persist HIP-4 fills in ClickHouse and derive API, materialized-view and analytics projections from that history.
blocks + fills
replayable raw history
risk + API + analytics views
The HIP-4 ingestion path includes AI-assisted Rust. The architecture, invariants, tests and production operation remain mine.
MORALIS / CONTINUUMI CONTRIBUTED
The event history was the product foundation.
At Moralis, I was part of the backend refactor that became Continuum. We polled nodes for blocks and receipts, wrote durable positions into partitioned S3 history, and let independent consumers turn the ordered stream into their own projections. Redis coordinated the hot path.
blocks + receipts
partitioned S3 event log
consumer ETL + projections
Example projection: extract ERC-20 Transfer events, persist normalized transfers and upsert query models for wallet, token and wallet+token APIs. Canonical-chain changes could correct and replay affected state.Moralis engineering write-up
MORALIS STREAMSCORE BUILDER
TWO-ENGINEER CORE BUILD
I did not integrate Moralis Streams. I co-built it.
With one other engineer, I built the production system behind Moralis Streams. Developers registered wallets or contracts and optional topic0 filters; we matched live transactions and logs, decoded the relevant activity and pushed webhooks through a hot path built for sub-second delivery. The hard parts were retries, duplicates, reorgs, confirmations and backpressure.
01register wallets + contracts
02match transactions + topic0 logs
03decode relevant activity
04deliver + retry webhooks
03
FINANCIAL CORRECTNESS
Money can’t be a float.
Propr calls out arbitrary precision for a reason. Raw amounts stay strings or BigInt at boundaries. Precision primitives are tested against an independent implementation. Integrations meet real dependencies before release.
Amounts
strings / BigInt
No accidental JS float conversion at financial boundaries.
Precision
decimal parity tests
Custom primitives differentially tested against decimal.js.
Integration
real dependencies
Testnet, contracts, ClickHouse containers and shadow comparisons.
INVARIANTS I EXPECT TESTS TO HOLD03 / 03
Units are explicit before arithmetic crosses a boundary.
Retrying a transaction path cannot silently double the intended effect.
The UI can recover authoritative state after missed stream events.
DATA ACCESS JUDGMENT
ORM WHEN IT HELPS · RAW SQL WHEN IT MATTERS
An ORM is a boundary tool, not a security policy.
I have used TypeORM in production, although it was years ago. I would use it again where a transactional service accepts outside input and benefits from consistent entities, migrations and transaction boundaries. I use raw SQL for ClickHouse because its engine-specific analytics are the point, not an implementation detail to hide.
TypeORM
PRODUCTION / EARLIER
BEST FOR · Transactional application services
Parameterized repositories and QueryBuilder make the safe path the easy path
Consistent entity, relation and repository conventions across a team
Explicit transaction scopes for multi-write invariants
Migrations and schema evolution travel with the application
Less mapping boilerplate and better discoverability in TypeScript
Raw ClickHouse SQL
CURRENT
BEST FOR · Append-heavy data and analytics infrastructure
Materialized and aggregate views stay explicit
Columnar queries and ClickHouse engine features remain visible
Batch ingestion and performance-sensitive query shape stay controllable
No ORM impedance mismatch around database-specific behavior
The SQL itself is reviewable as part of the data contract
FUN FACT · INFORMATIONSSYSTEME98 / 100
I studied computer science in Germany, then dropped out when Moralis offered me the job. One of the few exams I took was Informationssysteme—databases, SQL and relational algebra. I scored 98 out of 100.
Runtime validation → authorization → parameterized values → least-privileged database role. An ORM helps with this path; it does not replace it, solve decimal precision, or make an external exchange call atomic.
I run Felix CDP and Morpho liquidation bots on HyperEVM. With no public mempool, the useful edge is reliable state and execution: the bots sit beside my Hyperliquid node in Tokyo to reduce round-trip latency.
01state ingest
02eligibility + math
03simulation
04submit
05observe
06reconcile
FELIX / CDPPRIVATE — CALL
Track less. Refresh precisely.
Maintain the trove index, react to each block, refetch only affected state, simulate the opportunity, submit, then remove or reconcile positions after the result.
targeted refetch
protocol math
post-transaction state
MORPHOPRIVATE — CALL
Same lifecycle. Different risk model.
The second bot proves that the execution discipline is reusable. Health checks and opportunity math change; idempotency, observation and recovery do not.
position monitoring
simulation
failure recovery
THE BOUNDARY
I'm an execution and infrastructure builder, not an institutional quant researcher. I've run liquidation, funding, looping and small delta-neutral strategies. Sophisticated portfolio construction and rebalancing are not my expertise.
05
THE HONEST MATCH
No 94% fit score. Here is the ledger.
“Proven” means I can point to a system, test or result. “Adjacent” means there is real transferable depth and a named limitation. “Gap” means gap.
PROPR ASKSEVIDENCE / CAVEATSTATUS
Strong TypeScript / typed systems
Primary language across production frontend, backend, SDKs and bots.
PROVEN
Trading / exchange domain
Purrdict, signed Parlay RFQs and cashout, builder-code execution, liquidators, nodes and market data.
PROVEN
Schema → API → tests → UI
Mute: ClickHouse → NestJS → integration tests → Next.js. Parlay: Solidity → Bun relay → typed SDKs → live UI.
PROVEN
Real-time infrastructure
Core builder of Moralis Streams, plus Parlay maker/taker WebSockets, Hyperliquid gRPC block delivery, SSE and signed webhooks.
PROVEN
Arbitrary-precision financial logic
String/BigInt accounting, fixed e6 collateral identities and decimal.js differential tests.
PROVEN
Integration-first testing
HyperEVM testnet fills, Anvil/Foundry, ClickHouse test containers, Playwright and shadow traffic.
PROVEN
React / Next.js delivery
Felix, Purrdict and MakaPay span trading, risk and payments interfaces in production-grade Next.js.
PROVEN
REST + WebSocket exchange APIs
Hyperliquid REST/WS integration plus a typed maker/taker RFQ relay, streamed state and explicit protocol errors.
PROVEN
AWS infrastructure
Contributed to Moralis's AWS migration; every VM in my current Hyperliquid stack runs on AWS, with S3, SSM, SNS and snapshots around the runtime.
This is application and migration ownership; I am not presenting Terraform as current muscle memory.
PROVEN
Monorepos / Turborepo
Connected systems—including the Parlay relay, maker fleet and two SDKs—live in one Bun/Turbo workspace and remain independently deployable.
PROVEN
Node framework / NestJS
Mute.sh's current API control plane runs on NestJS 11.
PROVEN
5+ years production backend
Backend ownership since Moralis in 2022; earlier work was full-stack/onchain.
I won't relabel seven years of crypto as seven backend-only years.
ADJACENT
SQL + production ORM (TypeORM preferred)
Production TypeORM experience earlier in my backend career; current data infrastructure uses deliberate raw ClickHouse SQL, materialized views and aggregate views.
TypeORM is familiar but no longer daily muscle memory. I rely on validation, authorization and parameter binding—not the ORM alone—for injection safety.
PROVEN
Event sourcing
Moralis Continuum used replayable block/receipt partitions as the source for downstream ETL and query projections; my HyperEVM and HIP-4 pipelines use the same model today.
Continuum is infrastructure-level event sourcing: ordered event history and rebuildable projections, rather than a single-application aggregate store.
PROVEN
KYC / compliance systems
Payments and transaction infrastructure, but not KYC ownership.
A real gap, not a keyword I can stretch.
GAP
AI
AI AS A WORKING SYSTEM
I do not prompt one model and hope. I route the work.
I use AI for nearly every implementation pass now. The edge is not typing faster; it is turning intent, product taste and repository knowledge into tight feedback loops.
01WISPR FLOW
Say the whole problem.
I dictate the intent, constraints, edge cases and doubts before compressing the task. That prevents a lazy one-line prompt from making the model invent the brief.
02CLAUDE DESIGN
Prototype before production.
For product work, I scaffold wireframes and variants first. Weak hierarchy and generic output get rejected before they harden into production code.
03TASK-SPECIFIC SKILLS
The codebase is the prompt.
The repository and the risk choose the skills—frontend patterns, diagnosis, TDD, security, architecture or release—not one permanent mega-prompt.
04CLAUDE CODE + CODEX
Bound it, then parallelize.
Repo-aware agents inspect existing patterns, plan multi-file changes and take independent work in parallel worktrees while I keep the interfaces coherent.
05ELIAS / ACCEPTANCE
Generated is not done.
I use the feature, review invariants and run tests, browser checks, builds, logs and live health. Repeatable failures become new repo rules. I own the rollback.
THE TASK CHOOSES THE ROUTEVERIFICATION DEPTH FOLLOWS RISK
INTERFACEfrontend-design → Storybook → browser
BUG / REGRESSIONreproduce → diagnose → regression test
I also encoded failures back into the repository: one rule for Outcome's 14px Tailwind/Figma math, another for the Storybook mobile viewport setting that silently failed. The lesson survives the session.
TRANSPARENT BOUNDARY
TypeScript is my expert language. I use AI for almost every implementation pass; my Rust and Python work is AI-assisted and heavily tested. I do not present myself as a Rust or Python specialist. If I cannot explain, verify and operate it, it does not ship.
06
OPTIONAL DEPTH
Worth a detour?
The short case is above. These are the systems I would open during a call—not a wall of logos pretending every project is equally relevant.
LIVE / PROPR PRODUCTION API
I read the docs. Then I called the API.
checking
GET /v1/health/services—
QUESTIONS I'D ASK IN WEEK ONENOT THE GENERIC ONES
01Where is an order intent made idempotent—and what can still duplicate after reconnect?
02Which source wins when REST state and the WebSocket stream disagree?
03How are partial fills represented across account rules, UI state and reconciliation?
04Which failures should stop trading, and which should degrade without hiding risk?
THE DECISION
I'm not applying as a pure quant. I'm applying to own this whole path.
Give me one real problem from your backlog. I'll show you how I would break it down and the closest system I've already shipped.