Ahmed Hashim builds software that holds the line.

Software architect with 11 years across TypeScript/Node.js, Python, Go and AWS. I build cloud and release infrastructure, web and mobile products, data systems, and AI agent tooling with hard safety boundaries.

Currently a software architect at a drone-operations company.

Open to senior engineering and architecture roles (remote).

See my work View GitHub profile

Nothing crosses the line unchecked

Past the line, the statement runs against the SQLite database.

Held: writes need a human to approve this exact statement.

Demo of how sqlguard-mcp gates writes. In the real tool the approval happens out of band with sqlguard approve <token>.

Transaction

A batch of writes

Past the line, the transaction is applied.

Held: a commit is applied only after it is written to the write-ahead log.

Demo of how atlas-graph-db commits. Its engine appends each transaction to a write-ahead log, synced to disk by default, before applying it, and recovers by replaying the log.

Release

runon 0.14.0, ready to publish to PyPI

Past the line, the release is published to PyPI.

Held: a release publishes only after its tests pass.

Demo of runon's release workflow: it runs the tests, then publishes to PyPI through Trusted Publishing.

Test run

A new run, compared with the baseline

Past the line, the result is reported.

Held: a difference counts as a regression only if it clears the run-to-run noise.

Demo of how noisefloor judges a change: it runs your target several times, measures the spread, and reports each case as regressed, broke, improved or unchanged.

Candidate

A candidate article from your sources

Past the line, it can be drafted in your editorial voice.

Held: it is drafted only if it clears the quality threshold, adjusted for the model your workspace picked.

Demo of My Stream's score gate. Try the whole pipeline in the Products section.

Question

How do I submit an expense report for travel?

Past the line, the model answers with citations.

Held: it answers only if retrieved evidence clears its confidence floor.

From rag-knowledge-agent's README: a question its sample documents can't answer is refused before any model call.

Proposed by the triage agents

scale_up on checkout-api

Past the line, the action runs through a dry-run adapter.

Held: the remediation waits for a human to approve, edit or reject it.

Demo of triage-graph's approval gate. It runs on fixture incidents with a dry-run adapter.

What I work on

Five areas, and the work that shows each one.

  • Cloud and release infrastructure

    • My Stream's backend on AWS: Amplify, Lambda, an AppSync GraphQL API, Cognito sign-in and Stripe billing.
    • sqlguard-mcp ships a non-root container image and a Helm chart, and its CI deploys it to a Kubernetes (kind) cluster and checks it.
    • runon's releases run its tests first, then publish to PyPI with Trusted Publishing.
  • Web and mobile products

  • Data systems

    • atlas-graph-db, a graph database written from scratch: storage engine with a write-ahead log and crash recovery, atomic transactions, its own query language (AQL), a multi-user server and an Angular explorer.
    • sqlguard-mcp runs reads on a read-only SQLite connection.
    • Distributed state checked under faults: Raft attacked by a deterministic simulator (quorum-lab) and a CRDT fuzzed until replicas converge (crdt-notes).
    • Contracts for JSON event streams (schema-drift) and a ground model that states its uncertainty (strata).
    • Storage and databases checked against failure: power cuts during writes (wal-crash), PostgreSQL migrations under live traffic (migrate-safe) and time-series compression (tsz).
    • An offline-first Android field notebook that merges edits through CRDTs (fieldlog).
  • Testing and developer tooling

  • AI systems

How I build

Principles I come back to, each quoted from the code or docs where it lives.

Open source

Thirty-two public repos with 3,292 passing tests as of October 2026, one dot per test. After three featured repos, the route flies five legs that group the rest by what they do.

The three ringed in magenta come first: two agent tools that stop for human approval, and a graph database built from scratch. I ran every suite between 13 and 16 October 2026, and each count matches the repo's CI. Where some tests need a service such as PostgreSQL, Redis or an Android emulator, the panel says so, and where this machine lacks something, such as ROS 2, the panel says that too.

  • Featured repo: a cluster inside magenta airspace.
  • Group of repos: a waypoint with every test in the group, and a card for each repo. One dot is one passing test, and every dot is the same size.
  • Route through the featured three and the five groups.
  1. triage-graphPython, 134 tests , details

    triage-graph

    AI systems

    134 passing tests

    Multi-agent incident triage on LangGraph with a human approval gate enforced in code, plus a CrewAI port and a written comparison of the two.

    Language
    Python
    Stack
    LangGraph, CrewAI, Pydantic
    Scope
    Runs on fixture data.
    Counted with
    uv run pytest (134 passed, 1 skipped)
  2. sqlguard-mcpGo, 139 tests , details

    sqlguard-mcp

    AI systems

    139 passing tests

    An MCP server that lets an agent query a SQLite database and refuses any write until a human approves that exact statement.

    Language
    Go
    Stack
    MCP Go SDK, SQLite, Helm
    Approval
    A human runs sqlguard approve <token> out of band. Each approval is single-use and bound to the exact statement. SQLite only.
    Counted with
    go test -race -count=1 -json ./... (65 tests plus 74 subtests)
  3. atlas-graph-dbTypeScript, 686 tests , details

    atlas-graph-db

    Data systems

    686 passing tests

    A graph database written from scratch in TypeScript, with a write-ahead log, crash recovery, atomic transactions and a Cypher-like query language (AQL).

    Language
    TypeScript
    Stack
    Node.js, Fastify, Angular
    Counted with
    pnpm test (468 engine and server tests plus 218 web app tests)
  4. AI and agents6 repos, 591 tests , repos

    AI and agents

    Agents held to hard limits, and tools to check them.

    Open the group page

    591 passing tests in six repos

  5. Data and storage6 repos, 202 tests , repos

    Data and storage

    Storage, replication and data contracts, checked under faults.

    Open the group page

    202 passing tests in six repos

  6. Reliability in production7 repos, 499 tests , repos

    Reliability in production

    Latency, limits, alerts and flaky tests, measured instead of assumed.

    Open the group page

    499 passing tests in seven repos

  7. Change gates and tooling4 repos, 523 tests , repos
  8. Drones and field work6 repos, 518 tests , repos

    Drones and field work

    Flight safety, firmware and geology, tested in simulators and on emulators.

    Open the group page

    518 passing tests in six repos

Products

Products I ship, mostly solo: a web app for AI publishing workflows, a Quran reader on the web, and a long-running Quran app for Android.

My Stream

feed.geohashim.com

Web app

An AI publishing platform. Scrape sources, score them against a quality threshold, and draft articles in your editorial voice. Workspaces and scheduled automation.

It's an Angular and Ionic web app, with its backend on AWS: Amplify, Lambda, an AppSync GraphQL API, Cognito sign-in and Stripe billing.

How it works

Built in Anthropic runs out of the box, the rest with your own keys.

Effective threshold

60= clamp(60 + 0, 20, 95)

effective = clamp(platform threshold + model offset, 20, 95)

Cheaper models score lower on the same rubric, so My Stream adjusts the threshold per model and they aren't silently rejected.

Turn it off to see the problem it solves: a cheaper model scores lower on the same rubric and most items get rejected.

Editorial voice

Run type: on demand

A run started from the article queue is the only path through the score gate. Scheduled runs, daily or on weekdays at 08:00 UTC, write from the workspace's topic list and skip scraping, scoring and the threshold.

Simulated run with made-up items. Each dot is an item with a random base score, shifted by the model's offset: the higher it flies, the higher it scored. Items below the magenta line peel off at the Score gate.the further right it flies, the higher it scored. Items left of the magenta line peel off at the Score gate. The starting threshold of 60 is an illustrative setting. To show more traffic, the demo scores every item and drafts the top 3 that pass; the product's platform settings default to 5 scored and 1 drafted per run. The stages and the threshold formula are the real ones.

  1. Sources

    You point it at RSS feeds and topics, per workspace.

  2. Scrape

    A Lambda fetches each source and queues candidate items.

  3. Score

    The model you pick rates each item, up to a per-run limit, against a fixed rubric and a quality threshold, adjusted per model so cheaper models aren't silently rejected.

  4. Draft

    The highest-scoring items that pass, up to a per-run limit, are drafted in your editorial voice: voice, reading level, word count, keywords and citation rules.

  5. Publish

    You review the queue, edit if you want, and publish.

Example paragraph in this voice

Houseplants need less water and more light as winter sets in. Moving pots closer to a bright window, while keeping leaves clear of cold glass, helps most common varieties through the darker months. Watering can wait until the top of the soil feels dry.

Your plants are probably a bit sleepy right now, and that's fine. Give them the brightest window you've got, keep them off the cold glass, and go easy on the watering. They'll perk up again once spring rolls around.

During the winter months, houseplants require less frequent watering and greater access to natural light. Pots should be positioned near a bright window, away from direct contact with cold glass, and the soil should be allowed to dry between waterings.

Shorter days in winter slow the growth of most houseplants, which in turn lowers their water requirements. Care routines should therefore prioritize light over watering frequency: plants placed near bright windows, but away from cold glass, are less likely to suffer leaf damage during this period.

So, your plants look a little tired lately? That's normal for this time of year. With shorter days they grow slowly, so they need less water than you'd think. Move them somewhere bright, keep them away from the cold glass, and check the soil before you water.

This simulated run

In
0
Scored
0
Passed
0
Drafted for your review
0

In the product, the page polls the job record for run progress every 1.5 seconds.

Works with 10 AI providers: Anthropic, OpenAI, Google, xAI, DeepSeek, Mistral, Groq, Cerebras, OpenRouter and SambaNova. Anthropic runs out of the box, the rest with your own keys.

Open My Stream How it works: My Stream

Mushaf

mushaf.geohashim.com

Web app

A focused, ad-free digital Quran reader for the web, built for fast page navigation, comfortable reading typography and a layout that respects the printed Mushaf.

Open Mushaf How it works: Mushaf

About

I'm a software architect at a drone-operations company, with 11 years across TypeScript/Node.js, Python, Go and AWS.

I build cloud and release infrastructure, web and mobile products, data systems, and AI agent tooling with hard safety boundaries. On this page, that means an AWS backend with sign-in and billing, a release workflow that runs the tests before it publishes, web apps and an Android app, a graph database written from scratch, and agent tools that stop for human approval.

I also ship my own products, mostly solo: applied AI for publishing workflows, and a long-running line of work in Islamic resources, including a digital Mushaf and a Quran Android app that have been in users' hands for years.

Tools I reach for

Languages
TypeScript, Node.js, Python, Go
App and front end
Angular, Ionic, Capacitor
Cloud
AWS Amplify, Firebase
AI
LangGraph, MCP, Anthropic, OpenAI
Payments
Stripe

Contact

Open to senior engineering and architecture roles (remote).