Basel Ashraf

I am an undergraduate engineer who ships production software. A layout engine that outruns Meta’s Yoga while shipping an eighteenth of the code. A review platform that has served 90,500 page views. A certificate SaaS running for 55+ accounting firms.

See the work u2679054@uel.ac.uk

Building since 2023 · sole engineer on everything below · github.com/BaselAshraf81

A layout engine that does not need the browser

LayoutSans takes a tree of boxes with flex and grid rules and returns exact pixel positions for every one of them. No DOM. No WASM. It runs on Node, Bun, Deno, Cloudflare Workers and the browser, with zero dependencies, in about 17 kB gzipped, against the 300 kB+ that Meta’s Yoga ships before it can lay out a single box.

Milliseconds to lay out a tree, lower is better. Log scale: each step is ten times the last. Figures from the project’s own published benchmark.
Layout time in milliseconds by engine and tree size
Tree LayoutSans Yoga (WASM) Browser DOM
100 boxes 0.27 ms 0.80 ms 8.0 ms
10,000 boxes 4.82 ms 8.0 ms 800 ms
100,000 rowsvariable height 46 ms 85 ms crashes
Bundle shipped ~17 kB gz 300+ kB gz browser only

It also made canvas text behave like text

Version 0.2 added the part everyone skips: selection, clipboard copy, Ctrl+F search, working hyperlinks and screen-reader accessibility, on a canvas, with no visible DOM layout, and a node count that stays proportional to the viewport rather than to the number of items. It sits on top of chenglou/pretext: pretext measures how big text is, LayoutSans decides where everything goes.

Stars
67
Language
TypeScript
Dependencies
0
Licence
MIT
The LayoutSans demo: a fully rendered article on a canvas, flanked by counters reading 204 DOM nodes and zero measureText() calls in the hot path, and a checklist of interaction features all ticked.
layout-sans The engine’s own instrument panel, running. On the left it counts what it costs the page: 204 DOM nodes for that entire document, zero measureText() calls in the hot path, one proxy caret, and ::selection never used. On the right, every v0.2 interaction accounted for: drag selection, clipboard, search, focus rings, screen‑reader tree.

Two products with real users, both built alone

Prolific Tea

A review platform where participants on Prolific rate the researchers who pay them, on fairness and on rejection behaviour. It is the Turkopticon that Prolific never had. Every researcher gets a profile with an aggregate rating, a rejection count and threaded reviews, so a participant can check who they are working for before they start.

Next.js throughout, plus a Chrome extension that identifies researchers by intercepting the network traffic of the study list, PWA push notifications, image uploads, threaded comments and the moderation tooling needed to keep a review site honest. It is indexed by Google and grows on its own.

No company behind it, no investors, no ads, free permanently, funded by the people who use it.

Page views
90,500
Researchers indexed
1,582
Languages
5
The Prolific Tea homepage: a searchable, paginated index of researchers, each row carrying an aggregate rating and review count, beside the site's own usage figures.
prolifictea.com The index as a participant meets it: searchable, sortable, no account needed to read it. The counters are the site’s own, not mine.

AlertaCert

Certificate management for accounting firms. It watches digital certificates for expiry, warns by email and WhatsApp before they lapse, and re-checks revocation every night so a dead certificate surfaces here before a client notices it. Multi-signer PDF workflows let outside parties sign without creating an account.

Sole engineer on product, billing, infrastructure, security and support. Firms across Latin America, Europe and India depend on it.

Firms served
55+
Uptime
99.94%
Engineers
1
The AlertaCert site, showing certificate expiry monitoring and multi-signer PDF workflows alongside published status figures.
alertacert.com The product states its own numbers in public: 280+ certificates under watch for firms in seven countries, and 99.94% uptime across the last ninety days with no unplanned outage.

Prolific Tea’s figures are reported by the site itself. AlertaCert’s are mine, from my own monitoring.

Things that got out

Work that found its own audience, and the one project this page is lit by.

Eigendrum

Draw any closed shape and hear what it would sound like as a drum. It solves the eigenmodes of the membrane you drew (the standing waves a real drumhead of that outline would settle into), then plays them, and animates the nodal patterns while they ring. The front page of r/InternetIsBeautiful liked it.

219upvotes on r/InternetIsBeautiful, 31 comments

A five-pointed star outline drawn on pale ground, filled with a smooth two-tone blue field showing how far the membrane is displaced in the mode that is ringing.
eigendrum.com A five‑pointed membrane, struck off‑centre. The blue field is displacement; the outline is the shape as drawn. Getting there meant solving 2,051 unknowns on a 4,392‑triangle mesh: 802 ms, in the browser, no server.

Photophane

Drop in a photograph and it computes a clear plate you can 3D print. The plate looks like a blank slab on a table. Point a torch through it and your photograph lands on the wall, formed entirely by refracted light. The effect is called a caustic, and it is the reason this page looks the way it does: the light behind my name up there is computed the same way.

48upvotes on r/photogrammetry

A measured three-dimensional diagram: a lamp, a clear plate, and the photograph of a cat that the plate's refracted light forms in warm amber on the wall behind it.
photophane The arrangement it solves for: a lamp 1.42 m out, the plate in the middle, and the photograph landing on a wall 300 mm behind, carried entirely by 10.97 mm of relief cut into a 100 mm body. That warm image on the wall is a caustic, the same thing burning behind my name at the top of this page.

Open source, tools and findings

  • holystitch

    An MCP tool that turns Google Stitch designs into production React and Next.js code without spending a single AI token: it calls the Stitch API directly and emits the whole component tree.

    23 stars · TypeScript

  • Nextron #531

    I upgraded a widely used Electron + Next.js framework from Next 14 to 16 and React 18 to 19, across 33 files. Merged and released as nextron@9.6.0 the same day.

    Merged · +1,218 −416

  • vibellm

    An instant language-model generator: it randomises both the weights and the structure, so you can watch what an untrained architecture actually does.

    12 stars · 57 upvotes on r/LocalLLM

  • fastemporal

    Luxon’s date and time API reimplemented in Rust, with 332 tests ported across from Luxon, date-fns and the TC39 Temporal conformance suite.

    Rust · published on docs.rs

  • Legal document RAG

    Retrieval over 25,303 legal documents with hybrid search, holding 230+ concurrent users on one T4 GPU behind a request queue I wrote, with no out-of-memory failures.

    Python · LlamaIndex, FAISS

  • Stored XSS in M-Pesa

    A stored cross-site scripting flaw in M-Pesa’s PDF receipt generator, reached through font descriptor injection. Reported and accepted through HackerOne.

    Security research · not publicly disclosed

  • Passion of Rugs pipeline

    A Python pipeline that pulled 120,000+ records out of 1,200+ inconsistent spreadsheets into one CRM schema, using the OpenAI API for field mapping. Deduplication and caching cut the API bill by 13%. It runs unattended.

    Python · part-time, ongoing

  • fx-inject-shim

    A drop-in shim restoring the Firefox 152 tabs and scripting injection APIs, with no call-site changes for anyone adopting it.

    21 upvotes on r/firefox

Also on the shelf, less finished: html-in-3d, a black hole in your room, and a physics-synced music visualiser.

Background

  1. BSc Computer Engineering and Software Systems

    University of East London & Ain Shams University — dual degree

    February 2021 – expected November 2026

  2. Graduate summer school, Università di Pisa

    Human-Centric ICT for Industry 5.0, Pisa — on scholarship, graded 29/30

    September 2025

  3. Exchange year, Hanyang University

    Seoul, South Korea — GPA 4.0 of 4.5

    September 2024 – January 2025

What I reach for

Languages TypeScript, Rust, Python, Java, SQL

Web Next.js, React, Spring Boot, Tailwind, Prisma, Stripe, Chrome extensions

Data & AI OpenAI API, LlamaIndex, FAISS, TensorFlow, pandas

Infrastructure PostgreSQL, Supabase, Docker, Vercel, Linux, Git

Security Burp Suite, OWASP, WebAuthn, bug bounty