{"candidate":{"name":"Elias Alioui","role":"Software Engineer","location":"Zug / remote","email":"elias.alioui1@gmail.com","github":"https://github.com/locothedev","linkedin":"https://www.linkedin.com/in/e83a813222/"},"target":{"company":"Propr","role":"Software Engineer","premise":"I own the boundary between Hyperliquid, backend rules, transaction correctness and the trading screen.","motivation":{"title":"I want to stay in Hyperliquid. I do not want to stay comfortable.","introduction":"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.","reasons":[{"label":"HYPERLIQUID / LONG TERM","title":"I want to compound here.","proof":"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."},{"label":"PROPR / FIRSTHAND","title":"The product clicked when I used it.","proof":"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."},{"label":"THE ROOM / GROWTH","title":"I want the uncomfortable learning curve.","proof":"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."}],"conclusion":"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."}},"evidence":{"verticalSlice":[{"title":"My Hyperliquid node","detail":"Mainnet + testnet infrastructure I own and operate today; node-adjacent delivery.","tag":"I OWN + OPERATE"},{"title":"Block + event delivery","detail":"gRPC streams and low-latency ingestion into typed services.","tag":"I OWNED"},{"title":"ClickHouse","detail":"Raw logs, materialized views, aggregation and replayable history.","tag":"I OWNED"},{"title":"Mute NestJS API","detail":"REST, SSE, API keys, metering, webhooks and operational controls.","tag":"I OWNED"},{"title":"Next.js trading product","detail":"Live market state, wallet signing, builder codes and finished UX.","tag":"I OWNED"}],"realtimeDelivery":{"system":"MORALIS STREAMS","ownership":"CORE BUILDER","title":"I did not integrate Moralis Streams. I co-built it.","summary":"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.","flow":["register wallets + contracts","match transactions + topic0 logs","decode relevant activity","deliver + retry webhooks"],"why":"This is the same class of problem Propr has: user-defined rules over a live chain stream, followed by fast, observable and recoverable delivery into another system.","href":"https://docs.moralis.com/streams/evm-streams"},"eventSourcing":[{"system":"HYPERLIQUID / CURRENT","ownership":"I OWN + OPERATE","title":"I use the same model now.","summary":"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.","flow":["blocks + fills","replayable raw history","risk + API + analytics views"],"note":"The HIP-4 ingestion path includes AI-assisted Rust. The architecture, invariants, tests and production operation remain mine."},{"system":"MORALIS / CONTINUUM","ownership":"I CONTRIBUTED","title":"The event history was the product foundation.","summary":"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.","flow":["blocks + receipts","partitioned S3 event log","consumer ETL + projections"],"note":"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.","href":"https://sales.moralis.com/blog/why-we-built-continuum"}],"workspaceArchitecture":{"stack":"BUN / TURBO / TYPESCRIPT / RUST / SOLIDITY","title":"One repository for systems that have to change together.","introduction":"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.","layers":[{"name":"Deployable apps","items":["Rust block + gRPC services","Felix liquidator","HIP-4 + Mute APIs","Parlay relay + maker fleet"]},{"name":"Shared packages","items":["ClickHouse client","WebSocket event contracts","HIP-4 SDK + UI primitives","Parlay taker + maker SDKs"]},{"name":"Task graph","items":["Dependency-aware builds","E2E after dependencies build","Filtered local development","Coordinated Bun, Cargo + Foundry gates"]}],"reasons":["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"]},"precision":[{"label":"Amounts","value":"strings / BigInt","note":"No accidental JS float conversion at financial boundaries."},{"label":"Precision","value":"decimal parity tests","note":"Custom primitives differentially tested against decimal.js."},{"label":"Integration","value":"real dependencies","note":"Testnet, contracts, ClickHouse containers and shadow comparisons."}],"dataAccess":{"title":"An ORM is a boundary tool, not a security policy.","introduction":"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.","choices":[{"name":"TypeORM","recency":"PRODUCTION / EARLIER","bestFor":"Transactional application services","reasons":["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"]},{"name":"Raw ClickHouse SQL","recency":"CURRENT","bestFor":"Append-heavy data and analytics infrastructure","reasons":["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"]}],"funFact":{"label":"FUN FACT · INFORMATIONSSYSTEME","score":"98 / 100","text":"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."},"securityInvariant":"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.","href":"https://typeorm.io/docs/query-builder/select-query-builder"},"requirementLedger":[{"ask":"Strong TypeScript / typed systems","evidence":"Primary language across production frontend, backend, SDKs and bots.","status":"direct"},{"ask":"Trading / exchange domain","evidence":"Purrdict, signed Parlay RFQs and cashout, builder-code execution, liquidators, nodes and market data.","status":"direct"},{"ask":"Schema → API → tests → UI","evidence":"Mute: ClickHouse → NestJS → integration tests → Next.js. Parlay: Solidity → Bun relay → typed SDKs → live UI.","status":"direct"},{"ask":"Real-time infrastructure","evidence":"Core builder of Moralis Streams, plus Parlay maker/taker WebSockets, Hyperliquid gRPC block delivery, SSE and signed webhooks.","status":"direct"},{"ask":"Arbitrary-precision financial logic","evidence":"String/BigInt accounting, fixed e6 collateral identities and decimal.js differential tests.","status":"direct"},{"ask":"Integration-first testing","evidence":"HyperEVM testnet fills, Anvil/Foundry, ClickHouse test containers, Playwright and shadow traffic.","status":"direct"},{"ask":"React / Next.js delivery","evidence":"Felix, Purrdict and MakaPay span trading, risk and payments interfaces in production-grade Next.js.","status":"direct"},{"ask":"REST + WebSocket exchange APIs","evidence":"Hyperliquid REST/WS integration plus a typed maker/taker RFQ relay, streamed state and explicit protocol errors.","status":"direct"},{"ask":"AWS infrastructure","evidence":"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.","status":"direct","caveat":"This is application and migration ownership; I am not presenting Terraform as current muscle memory."},{"ask":"Monorepos / Turborepo","evidence":"Connected systems—including the Parlay relay, maker fleet and two SDKs—live in one Bun/Turbo workspace and remain independently deployable.","status":"direct"},{"ask":"Node framework / NestJS","evidence":"Mute.sh's current API control plane runs on NestJS 11.","status":"direct"},{"ask":"5+ years production backend","evidence":"Backend ownership since Moralis in 2022; earlier work was full-stack/onchain.","status":"adjacent","caveat":"I won't relabel seven years of crypto as seven backend-only years."},{"ask":"SQL + production ORM (TypeORM preferred)","evidence":"Production TypeORM experience earlier in my backend career; current data infrastructure uses deliberate raw ClickHouse SQL, materialized views and aggregate views.","status":"direct","caveat":"TypeORM is familiar but no longer daily muscle memory. I rely on validation, authorization and parameter binding—not the ORM alone—for injection safety."},{"ask":"Event sourcing","evidence":"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.","status":"direct","caveat":"Continuum is infrastructure-level event sourcing: ordered event history and rebuildable projections, rather than a single-application aggregate store."},{"ask":"KYC / compliance systems","evidence":"Payments and transaction infrastructure, but not KYC ownership.","status":"gap","caveat":"A real gap, not a keyword I can stretch."}],"optionalDetours":[{"title":"Parlay RFQ network","time":"3 min","relevance":"currently building · live testnet","summary":"I am building and operating parlay.mute.sh on HyperEVM testnet. Takers broadcast multi-leg HIP-4 positions; independent makers stream signed EIP-712 quotes; takers countersign the best; both sides escrow collateral on-chain. Dragonfly keeps RFQ state durable and Chainlink CRE drives resolution. The same stack includes typed taker and maker SDKs, a pooled maker vault and live-priced cashout.","label":"LIVE TESTNET","href":"https://parlay.mute.sh","bullets":["maker ↔ taker WebSockets","dual-signed RFQs","escrow + vault + cashout"]},{"title":"Felix CDP liquidator","time":"90 sec","relevance":"execution + reconciliation","summary":"A production HyperEVM bot that tracks underwater CDPs and executes liquidations. Co-located beside my own Hyperliquid node in Tokyo to reduce round-trip latency.","label":"PRIVATE — CALL","bullets":["targeted state refresh","protocol math","simulate → submit → reconcile"]},{"title":"Morpho liquidator","time":"60 sec","relevance":"same discipline, different lending model","summary":"A second liquidation path on HyperEVM. Useful proof that the execution lifecycle is a reusable system, not a one-off script.","label":"PRIVATE — CALL","bullets":["position monitoring","risk thresholds","failure recovery"]},{"title":"Mute.sh","time":"3 min","relevance":"backend depth","summary":"A commercial data layer for HIP-4: NestJS control plane, ClickHouse, REST + SSE, signed webhooks, replay, metering and Telegram delivery.","label":"LIVE","href":"https://mute.sh","bullets":["real-time data","commercial API","production operations"]},{"title":"Purrdict","time":"2 min","relevance":"finished trading product","summary":"I solo-built a HIP-4 prediction-market frontend with live feeds, wallet signing, agent flows, builder-code revenue and quest-based onboarding.","label":"LIVE","href":"https://app.purrdict.xyz","bullets":["Next.js UI","WebSocket state","order execution"]},{"title":"Outcome.xyz","time":"60 sec","relevance":"market validation","summary":"After I solo-built app.purrdict.xyz, Outcome.xyz saw it as a competitor and hired me for two months. At the time, Outcome was the top HIP-4 frontend by builder-routed volume.","label":"I CONTRIBUTED","href":"https://outcome.xyz","bullets":["Purrdict proved the work","hired for two months","HIP-4 product engineering"]},{"title":"Web3UIKit","time":"90 sec","relevance":"open source · React / TypeScript","summary":"At Moralis I was one of Web3UIKit's principal contributors and maintainers. The component library grew to 1.8k GitHub stars, and GitHub attributes 238 public contributions to me. That maintainer work also got me into GitHub Copilot during its technical preview and two years of free access—before AI-assisted coding became normal.","label":"CORE BUILDER","href":"https://github.com/web3ui/web3uikit","bullets":["1.8k GitHub stars","238 public contributions","early Copilot access"]},{"title":"MakaPay","time":"2 min","relevance":"transaction correctness","summary":"Non-custodial payments with deterministic addresses, Solidity settlement, fixed-unit fees, bounded retries and explicit degraded states.","label":"PROTOTYPE","href":"https://makapay.io","bullets":["CREATE2","BigInt accounting","onchain settlement"]}]},"disclosure":{"generatedFor":"Propr only","gapsIncluded":true,"applicationSubmitted":false}}