Skip to the workbench
babazadeh.dev/ career.sql

career=> \conninfo
You are connected to database "career" as user "visitor".
career=>

Moe Babazadeh

Moe Babazadeh

CTO at Neuroject · building since 2007

I architect AI-driven platforms and scalable digital products.

CTO at Neuroject, building the alignment layer for construction enterprises. Building since 2007: robots, IoT and firmware, then web, mobile and AI platforms.

Here his career is a database: 13 tables, 230 rows, 9 foreign keys. Pick a saved query or write your own, and watch each row stream up through the query plan.

SELECT value, label FROM facts;6 rows
valuelabelCheck
11.8k+commits since 2021as stated
10+products liveas stated
5devices in production
0.5B+sensor records logged
2apps on App Store and Google Play
300k+weekly downloads of packages I patched
careerpubliccurrent_roles.sqlvisitor@career · read-only
current_roles.sql

⌘+Enter runs the statement under the caret. Ctrl+Space suggests tables and columns.

Where he works today. Two open rows. CTO at Neuroject since September 2026, after joining as Chief Full Stack Engineer in June 2024, and a contract role at Neuroship since May 2026.

Output

SELECT 20.138 ms

2 rows from the query
#orgtexttitletextstartedyearmonth
NeurojectCTO2026-09
NeuroshipChief Full Stack Engineer (contract)2026-05

Query planEXPLAIN ANALYZE

client ← 2 rows

Planning 0.112 msExecution 0.026 msrows real · costs modelled · times simulated

Plan: 4 operators, 2 rows to the client.

connectedin-browser engineUTF8auto_explain onCtrl+Space suggestsLn 1, Col 1

Under the hood

01Parser

A lexer and a recursive-descent parser that keep a position on every node, so an error can point at its character.

02Planner

Pushes filters into scans, uses the primary-key index for lookups, and picks Hash Join or Nested Loop with a cost model in Postgres’ units.

03Executor

Every operator is a generator, so rows really stream: a Limit stops its scan early, a Sort or Hash takes everything first.

04Replay

Each row that moves between operators is logged on a simulated clock, and the plan view replays the log as particles.

\d+

Schema

13 tables and 9 foreign keys, built from his CV and project list. Projects and tech are many-to-many; Attendum and Active-Class are umbrella rows whose parts point back with parent_id. Click a table to query it.

100%
profile1 rowidintegernametextfull_nametextroletextcompany_idintegertaglinetextemailtextlinkedintextgithubtextcvtextorgs6 rowsidintegernametexturltextroles7 rowsidintegerorg_idintegertitletextstartedyearmonthendedyearmonthyearsnumericsummarytextduties16 rowsidintegerorg_idintegerseqintegertexttextprojects33 rowsidintegerparent_idintegerorg_idintegertitletextyearintegermade_attexttiertextdescriptiontexturltextapp_storetextplay_storetextgithubtexttech54 rowsidintegernametextproject_tech83 rowsproject_idintegertech_idintegerdevices5 rowstagtextproject_idintegernametextkindtextdetailtextfigurestext[]notetextcontributions5 rowsidintegerproject_idintegerrepotextyearintegerkindfix_kindstarsintegerweekly_downloadsintegerchangetextimpacttexturltextroots6 rowsidintegerperiodtexttitletextdetailtexturltextskills8 rowsidintegernametextfacts6 rowsidintegervaluetextlabeltextmessagesINSERT onlyidintegernametextemailtextbodytextcreated_attimestamptz
  • profile.company_id references orgs.id, optional
  • roles.org_id references orgs.id
  • duties.org_id references orgs.id
  • projects.parent_id references projects.id, optional
  • projects.org_id references orgs.id, optional
  • project_tech.project_id references projects.id
  • project_tech.tech_id references tech.id
  • devices.project_id references projects.id, optional
  • contributions.project_id references projects.id, optional
INSERT

Write to him

The only write a visitor may make. Fill in the string literals and execute: the engine checks the constraints, then your mail app takes over.

write_to_moe.sql
  1. INSERT INTO messages (name, email, body)
  2. VALUES (
  3. )
  4. RETURNING id, created_at;

The INSERT runs in this tab, checks its constraints, then opens your mail app with the draft. Nothing is sent from this page.

Or write to moe@babazadeh.dev directly.