Skip to content
View FawwazLawal's full-sized avatar

Block or report FawwazLawal

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
FawwazLawal/README.md
Fawwaz Lawal, above a blinking prompt cursor. In a band of glowing 0 and 1 glyphs, a netrunner with a silver-lavender bob looks back at the viewer, then turns and heads into a corridor of code. Opens the uncut film.

Fawwaz Lawal

what we coding today

System status, synced 2026-11-03: 3,133 contributions in the past year, 2,484 of them in private repositories, 20 upstream pull requests, 2 merged.

PUBLIC FawwazLawal/hellogitty · Go · SQLite · the local dashboard behind the ops log, one go install away

hellogitty: GitHub repository health dashboard

Jump to Ops log · HelloGitty · Restricted · Systems · Toolkit · Exit

PUBLIC one click to check · GENERATED written daily from GitHub's API by a script in this repository, and dated · SHOWN a screenshot · STATED my word, dated where it changes

00 · Ops log: my pull requests to other people's projects

GENERATED rebuilt daily from GitHub's API · PUBLIC each row opens the pull request and its review so far

I send fixes upstream, most often to impeccable, the design tool I use most: its hardening and audit guides. Beyond that: security tooling (OpenCTI, MISP, Coraza), XcodeGen, and Go's go test help text. Open means open: the state column comes from GitHub, not from me.

State Pull request
MERGED fix(ui): fix SMTP configuration margin and empty value display (#18931)
OpenCTI-Platform/opencti #19110 · opened 2026-10-20 · merged 2026-10-23
MERGED Add Arabic-script specifics to hardening reference (#1009)
pbakaus/impeccable #1084 · opened 2026-10-19 · merged 2026-10-21
OPEN fix(ui): align info icon tooltips in user creation form (#19017)
OpenCTI-Platform/opencti #19108 · opened 2026-10-19
OPEN fix: use deterministic parentCloseTime for ClaimReward sfRewardTime
Xahau/xahaud #927 · opened 2026-10-28
OPEN fix: reset both UNLReport arrays on flag ledger boundary
Xahau/xahaud #928 · opened 2026-10-28
OPEN fix: correct 2-byte variable-length decode formula in BinaryParser
XRPLF/xrpl4j #858 · opened 2026-10-26
OPEN Warn on unrecognized keys in target dictionaries
yonaskolb/XcodeGen #1660 · opened 2026-10-23
OPEN fix: Skip fee subtraction for sponsor-paid escrow transactions
ripple/explorer #1383 · opened 2026-10-26
OPEN fix: remove misleading getDefaultRipple() from TrustLine and account_lines
Xahau/xahaud #926 · opened 2026-10-27
OPEN refactor: Move generateBlindingFactor() from protocol to test utilities
XRPLF/rippled #8644 · opened 2026-10-27
Page 2 - pull requests 11 to 20
State Pull request
OPEN audit: add RTL checks to Responsive Design dimension
pbakaus/impeccable #1114 · opened 2026-10-22
OPEN feat(chat): auto-favorite nodes on direct message
meshtastic/web #1491 · opened 2026-10-27
OPEN feat: Add Wallet.from_mnemonic() for BIP39 mnemonic-derived wallets
XRPLF/xrpl-py #1069 · opened 2026-10-26
OPEN fix(ui): separate indicator list column values in the Knowledge tab (#18163)
OpenCTI-Platform/opencti #19154 · opened 2026-10-21
OPEN cmd/go: clarify test cache behavior for file metadata
golang/go #82377 · opened 2026-10-20
OPEN fix: [api] return proper REST response from auth key pin endpoint
MISP/MISP #11222 · opened 2026-10-20
OPEN fix: guard against duplicate-id responses in WebSocket handler
XRPLF/xrpl-py #1070 · opened 2026-10-27
OPEN docs: document skip/skipAfter limitations under multiphase evaluation (#804)
corazawaf/coraza #1785 · opened 2026-10-19
OPEN fix: Handle URIToken in account_lines marker lookup
Xahau/xahaud #925 · opened 2026-10-27
OPEN Fix broken links in XLS-85 and XLS-82 feature pages
ripple/opensource.ripple.com #242 · opened 2026-10-26
Page 3 - pull requests 21 to 23
State Pull request
CLOSED fix: Skip marker transaction in accountTxPage instead of dropping it
Xahau/xahaud #920 · opened 2026-10-26 · closed without merging
CLOSED test: port PySpark Catalog.listFunctions doctest
lakehq/sail #2821 · opened 2026-10-21 · closed without merging
CLOSED Fix Accept-Encoding quality parameter handling for gzip
hapifhir/hapi-fhir #8530 · opened 2026-10-20 · closed without merging
Field notes: what each change does

GENERATED 2026-11-03 from GitHub's API by gen/stats_cards.py: 2 merged · 18 open · 3 closed without merging. Practice repositories are left out. Go merges through Gerrit, so a Go pull request counts as merged when Gerrit's bot says so. If a daily run fails, this date stops moving.


Chapter 01 of 05, HelloGitty. She runs on through an archway of glyphs. Opens the HelloGitty repository.

01 · HelloGitty: the public tool behind the log

PUBLIC FawwazLawal/hellogitty
Go · SQLite · Special Licence · v0.2.0 (8), tag v0.2.8, released 2026-10-23

HelloGitty is a local dashboard for open-source work: every pull request and issue you have out on GitHub, sorted by whose move it is, beside the health of the projects you follow. I built it to run the work in the ops log, and it's the one project on this page you can install and check for yourself. It polls GitHub hourly into SQLite and serves a self-contained page on localhost: no build step, no CDN, and it works offline.

HelloGitty on localhost, split on a diagonal: dark mode on the left, light mode on the right, each half labelled on a tab above it. It tracks 31 repositories with 21 in the pipeline. Your move: an RTL-audit pull request to pbakaus/impeccable with changes requested, and an XcodeGen pull request failing on Linux. Waiting on others: eight, led by the MISP API fix and the Go help-text change. The pipeline panel counts 11 opened, 7 open, 2 merged and 2 closed, a 50 percent merge rate. A live sidebar lists new issues from golang/go, lakehq/sail and impeccable.

My own instance, a dev build after v0.2.0 (8), in both of its themes. Its pipeline counts match the ops log above: 7 open, 2 merged, 2 closed.

go install github.com/FawwazLawal/hellogitty/cmd/hellogitty@latest

Status: public; needs Go 1.26+ and a GitHub token (quick start). Proven: it runs, and its tests run before every tagged release (workflow). Not yet shown: anyone using it but me.


Chapter 02 of 05, Restricted. A retinal scanner sweeps red across her visor and ACCESS DENIED flashes in magenta neon.

02 · Restricted: two private projects

SHOWN screenshots · STATED descriptions and figures, dated · source private

GENERATED 2026-11-03 from GitHub's API: 2,484 of my 3,133 contributions in the past year were in private repositories.

Open the two private projects · Fisher (iPhone, Internet Archive audio) and Domain Dispatch (macOS, field operations)

The source is private, so this chapter shows the apps and marks every number as my word. GitHub counts the work without showing it, as the figure above.

Fisher: the Internet Archive's audio as a music app

SHOWN iPhone app · Swift · SwiftUI · Go backend · in development

An iPhone app and Go backend that make audio hosted on the Internet Archive feel like a music app: mixes built by stated rules, a home feed that learns from listening on the device, and a note on each recording's history.

Three iPhone screens from Fisher. Home shows generated Popular Mixes with mosaic covers and a Trending Now row. The Hip Hop Essentials playlist shows its mosaic cover and track list. The player shows a Dr. Dre recording with an About this recording note.

Status: in development, not in any app store; STATED 629 commits as of 2026-10-16. Pictured: the iPhone app.

Domain Dispatch: field operations where the network drops

SHOWN macOS app · Swift · SwiftUI · Vapor · Kotlin · alpha

One live map for teams working where connectivity ends: drones, vehicles, traffic cameras, aircraft, weather and mesh radios, with mission planning and dispatch. Offline-first: map packs, a sync queue that drains on reconnect, and a status bar that says what is connected. It speaks Cursor-on-Target over an embedded TAK relay, MQTT and HLS.

Domain Dispatch live map on macOS: a public traffic camera feed open beside the operator's own entities on a blurred satellite map, a status bar reporting a camera source unavailable and no devices connected, and a sidebar running from Live Map to Offline Maps.

The basemap is blurred, and the camera's agency badge and state obscured, because the console is pointed at a real place.

The failure worth designing for is the invisible one. An elevation lookup cached network failures as "no data", so an operator could plan offline, reconnect, and never get the terrain warning back. The fix separates checking from could not check from no conflict: an absent answer that renders as "clear" fails in the dangerous direction. The lookup also sends planned coordinates to a third party, so it is opt-in.

Status: alpha; STATED v0.193.0-alpha as of 2026-10-16. Pictured: the macOS app; the iOS app, Vapor service and Android companion are not. No claim of field use.

Declassify the repository figures · STATED 2026-10-16
Domain Dispatch, private repository Count
Commits 1,497
Tests about 3,600
Automated quality gates 44
Self-tests that prove a gate fails when it should 27

Counted from the private repository on 2026-10-16. No counting method is published, so read these as my record.


Chapter 03 of 05, Systems. She works at a curved holographic terminal surrounded by floating code panels.

03 · Systems: how I work

STATED from my own build notes · PUBLIC one pull request and one command you can run

Open: five habits, with one public trace

A check that cannot go red is not a check. A mutation test of mine passed a test that never ran against the mutant: go test without -count=1 can replay a cached result. I now watch a check fail against the broken state before I trust it to pass. My Go pull request is the public trace.

Detectors stop defect classes. Rules do not. Of thirteen recurring defect classes in my build process, the only two that stopped were stopped by an automated check. I build the detector first.

Replace the proxy with the act. git check-ignore -v exits 0 even for a file a negated rule keeps; git add --dry-run is the operation itself:

$ git check-ignore -v keep.log; echo "exit $?"
.gitignore:2:!keep.log	keep.log
exit 0
$ git add --dry-run keep.log
add 'keep.log'

Audit by computation, not by eye. I checked a design system against WCAG AA by computing every contrast ratio instead of trusting the documented ones. One token passed by 0.0008; another failed outright and was unused, so I deleted it.

Measure before you claim. "It builds" means it ran just now and exited 0. Reading is a hypothesis, running is a finding, and I say which one I have.

Working with agents

My day-to-day development runs through roughly thirty specialised Claude Code agents: builders, QA, composition review, release. The agents were the easy part. The work was building the instruments that keep them honest: detection for two agents about to write the same file, for gates that cannot fail, and for records claiming more certainty than they have.


Chapter 04 of 05, Toolkit. A gloved hand pulls holographic tools out of the air in cyan and violet.

04 · Toolkit: what I work with

STATED my list; Go, Python, Swift and GitHub Actions can be read in the public code linked above.

Open: languages, platforms, delivery, background
  • Languages: Go · Swift · Python · Kotlin
  • Apple: SwiftUI · Xcode
  • Delivery: Docker · GitHub Actions
  • Security tools I contribute to: OpenCTI · MISP · Coraza (interface, API and documentation fixes)
  • Background: B.S. Cybersecurity · B.S. Electrical Engineering (in progress)
  • Certifications: Security+ · CySA+ · PenTest+ · Associate of ISC2

How this page is built

Everything that moves or updates comes from a script in gen/; only the source footage, three Google Flow clips, is not committed. The daily workflow refreshes the numbers and the ops log. Every band has a reduced-motion still.

flowchart TD
  F["Footage generated with Google Flow<br/>(not committed)"] --> A["gen/ascii_film.py<br/>every frame in 0/1 glyphs"]
  A --> T["gen/title_cards.py<br/>titles, cursor, loops, stills"]
  T --> B["Opening film and chapter bands"]
  S["App captures"] --> W["gen/work_shots.py<br/>framing, location blur"]
  W --> P["Screenshots"]
  G["GitHub's API"] --> C["gen/stats_cards.py<br/>daily at 06:17 UTC"]
  C --> L["Status panel, private count,<br/>ops log"]
Loading

Chapter 05 of 05, Exit. She walks a corridor of falling binary towards a white gateway and steps through into light.

05 · Exit: check the record

PUBLIC every link opens a public record

Open: four public records to walk out through

> end of transmission

Pinned Loading

  1. hellogitty hellogitty Public

    GitHub repository health dashboard

    Go

  2. pbakaus/impeccable pbakaus/impeccable Public

    The design vocabulary for your coding agent. Steer with polish and bolder, review with critique and audit, catch AI slop before it ships.

    Rust 102k 6k

  3. OpenCTI-Platform/opencti OpenCTI-Platform/opencti Public

    Open Cyber Threat Intelligence Platform

    TypeScript 10.3k 1.5k

  4. FawwazLawal FawwazLawal Public

    Python