I'm NightFury, a French developer, and I run Forge Network (forgenet.fr) — a non-profit
association that publishes the projects on this page.
I tend to take a product across its whole stack rather than one layer of it: the database and its isolation model, the API, the interface, then the Debian machine it runs on — nginx, Docker, PM2, certificates, backups. Most of what follows exists because something had to be decided at that level.
const nightFury = {
role: ["Full-Stack", "SysAdmin", "Data Eng", "OS Builder"],
founder: "Forge Network · forgenet.fr",
stack: ["TypeScript", "Next.js", "React", "Node", "Dart", "PostgreSQL", "Docker", "Linux"],
now: ["Capibara (SaaS suite)", "a custom Linux distro", "a new Grand Projet"],
learning:"Scala & high-performance JVM systems",
};My main open-source project, and the only place where the claims on this page can be checked against the source. Everything after it is private, so start here.
|
A self-hostable Drive — files, folders, quotas, sharing — with three things most "drop a file" tools don't have. Quick-Upload opens a temporary drop zone on any device from a code — no login — with optional password, expiry and usage limit. Remote-Upload makes the server fetch a link itself, so a phone on a metered connection never relays the bytes. Hybrid encryption is a choice made per folder: encrypted at rest so the antivirus can still scan the file, or a zero-knowledge vault encrypted in the browser that the server cannot read at all. Shared Spaces are encrypted server-side only, because a zero-knowledge vault cannot be shared — that trade-off is written in the docs rather than left for you to discover. Same for the rest: background work runs inside the API process to keep a deployment to a single moving part, with Redis/BullMQ documented as the upgrade for horizontal scale instead of required up front. Antivirus scanning on upload · WebDAV mounting · personal-token REST API · desktop right-click integration · one-click self-update from GitHub · architecture, security policy and a candid threat model in |
Four systems in production. All four are private — client work and products that are sold — so the links go to the live product or the download, and the numbers come from the repositories.
|
The software a small company runs its day on: quotes, invoices, accounting, customers, stock, staff, shop — and the website that fronts it. Around twenty applications sharing one set of customers, one accounting ledger and one search index, so an invoice, the stock movement behind it and the ticket about it are the same object seen from three places. Each company also gets a public website it edits itself, built from blocks, served from its own domain. The isolation is structural rather than a filter: every customer gets its own copy of the database
schema, so one company's data can't turn up in another's query even if a CRM · French invoicing (Factur-X) · Accounting with FEC export · Shop · Inventory · Purchasing · Planning · Support · Projects · HR · Training · Blog · Newsletter · Chat · Wiki & storage Permissions are re-read from the database on every call rather than trusted from the session · Meilisearch, MinIO, a mail server with webmail, self-hosted video and a Stripe Connect marketplace each run as their own container · Not multi-region and not one database per client: a single Postgres holds them all, and scaling past one machine is a known open problem rather than a solved one. Payment, security and compliance code is 11 % of the lines and 29 % of that estimate. |
|
The platform Forge Network runs on: client projects and invoicing, server hosting, software licensing and a store. OPUS Cloud rents out servers with a console, a web file manager and backups in the browser. A Cloud Box behaves like a small VPS — SSH, a persistent home directory, your own packages — but it isn't a virtual machine: the sandbox refuses the privileges a normal SSH daemon needs, so the box ships its own lightweight root filesystem and SSH server instead. Docker doesn't run inside it and only the home directory survives a rebuild. Both limits are on the page, not discovered after signing up. Forge Licensing issues the licence keys for the group's software. Every answer is signed, so an application can verify a licence without calling home and a captured answer can't be replayed as a valid one. Elipse RSAI runs on it. Client workspace with quotes, invoices and instalment plans · certification program (27 tracks × 4 levels × 5 real-project briefs) · store with Stripe checkout and automatic licence delivery · news feed with RSS |
|
A Discord bot that server owners extend themselves — by drawing what they want, not by writing code. The usual bot features — 93 commands, levels, moderation with an AI pass, premium tiers — plus a visual editor where a module is a diagram of blocks. Nothing is compiled: the editor saves a graph and one interpreter walks it at runtime, so a server owner can build a ticket system or a role menu without touching a line of TypeScript. The hard part was never the editor. A button posted in a Discord channel outlives the process that posted it, so every component is written to the database and restored when the bot boots — without that, each restart leaves dead buttons in old messages. That, and the fact that Discord's limits (five buttons a row, five rows a message) have to be enforced in the editor rather than discovered by the user when the message fails to send. Least flattering number on this page, and it stays: 2.07× more lines were written than survive. The visual editor was rebuilt more than once. |
|
A field app for the health referents who follow French nurseries — on the phone, in the car, with no signal and no account. A referent covers 5 to 30 nurseries and owes each one a number of hours set by decree, split by quarter, and has to be able to prove it. Between two visits it gets written on a notepad, or not at all, and reconstructed in December. The app logs a visit in three taps, keeps four counters per nursery, and flags the quarter that is drifting — the quarterly minimum is the one people miss, you can reach the annual total and still be short on three quarters. It then writes the paperwork — visit reports, referral letters, care plans, annual review — as PDFs, offline. Nothing leaves the device, and that is a consequence rather than a preference. Records naming a child are health data; hosting them in France requires a certification well out of reach for a project this size, so the hosted version was dropped and the server removed entirely. The bill lands on synchronisation: with no server to reconcile against, two devices sync directly over the local wifi, or through an encrypted file on a USB stick when the nursery network keeps them apart — which it often does. Local database with sensitive fields encrypted · devices paired by QR code and a six-digit code read out loud · PDF engine written in Dart, no network · the only outbound call checks the licence and carries no data about anyone · an expired licence drops the app to read-only and never holds the records hostage 17k lines of tests against 56k lines of app. The rules that decide whether someone is compliant are kept apart from the interface so they can be tested on their own. |
| Project | Lines counted | Effort | Rebuild cost | Written / kept |
|---|---|---|---|---|
| Capibara | 430 122 | 189 person-months | ~2.46 M€ | 1.14× |
| Marcus | 112 364 | 67 person-months | ~867 k€ | 2.07× |
| OPUS | 103 925 | 53 person-months | ~687 k€ | 1.39× |
| Elipse RSAI | 83 471 | 33 person-months | ~434 k€ | 1.05× |
| OpenCoperLock | 28 147 | 12 person-months | ~155 k€ | 1.12× |
Not money anyone spent. These estimate what it would cost to rebuild each project from scratch with a senior team at the 2026 French senior rate (~650 €/day) — and they are computed rather than guessed. The script is tools/estimate.py and it runs on any of these repositories.
How. Every file is sorted into a zone — payment, security, compliance, integrations, business logic, interface, data model, infrastructure, tests, docs — and each zone carries its own lines-per-hour rate, because billing code with idempotency, webhooks and reconciliation does not cost what CRUD costs. Git history then adds what was written and later rewritten or thrown away, since abandoned work took the same time, and an overhead factor covers what leaves no file behind: architecture, deployment, operations.
A person-month is one person working full time for one month. It is a unit of effort, not a headcount — 189 person-months is roughly what a team of ~46 delivers in four months.
Two caveats. The productivity assumption sits at the optimistic end of the published 10–20 lines/hour range, so if these figures are wrong they are low rather than high. And on Capibara, payment, security and compliance code is 11 % of the lines but 29 % of the estimate — which is exactly why a flat average would have been worthless here.
Experiments, tools and weekend builds. Smaller, and that's the point.
|
A clipboard assistant that stays in the background. A hotkey grabs the selection from whatever application is in front, sends it to Gemini and pastes the answer at the cursor — falling back to another model when a quota runs out. |
A Minecraft Fabric mod (1.21, Java 21) inspired by Kenshi: capture built as a state machine — free, knocked out, imprisoned, enslaved — with cages, a control scepter, escapes, rebellions, and gamerule switches so it can't be used to grief a server. |
|
An older one. A console-style layer for the TV, navigable entirely with an Xbox controller, that launches local games and media — bridged to Windows through a Python hotkey listener. |
Gaming and office setups need different mice and different speakers. Two PowerShell scripts on one key: MouseMode swaps the Windows pointer profile, AudioSwitcher changes the default output and moves every running application onto the new device. |
Also in the lab
The least finished thing on this page, and the only one with no artifact behind it: no installer, no release, no repository yet. The target is a distribution built against the bare kernel — its own window manager, session, package and file managers — rather than a theme over an existing desktop, aiming for Arch-level configurability without Arch-level setup.
It's here because it's where a large share of my time goes, not because it's usable. Treat it as a statement of intent until there's something to install.
Counted across the eight repositories behind this page — 717 526 lines, private ones included. Re-derive it with tools/languages.py. A GitHub language graph would only see the public repos, which is the smaller half.
How to read these scores? Each score (out of 10) measures a concrete ability — not theory learned by heart. It reflects the ability to write clean, maintainable code and to handle a production deployment autonomously. Assessments are carried out and approved by OPUS on the basis of real, delivered projects.
Verifiable at forgenet.fr/verify/OPUS-2026-Z26F2D


