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", "Godot", "PostgreSQL", "Docker", "Linux"],
now: ["Capibara (SaaS suite)", "Fallended (voxel arena)"],
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, a game and a Minecraft mod. All six are private — client work, products that are sold, and game code that isn't published — 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 12 % of the lines and 28 % of that estimate. |
|
The group's own site, rebuilt this year: its products, a store with licences and downloads, server hosting and certifications. The Cloud rents out servers with a console, a web file manager and backups in the browser. A Cloud Box behaves like a small VPS — root over SSH, your own packages, everything kept across restarts — but it isn't a virtual machine: the sandbox refuses the privileges a normal SSH daemon needs, so the whole system lives in the one writable volume, runs under proot and brings its own SSH server. The one thing it can't do is run Docker. 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. Pages rendered on the server, ~122 KB of gzipped JavaScript on the home page · store with Stripe checkout and automatic licence delivery · downloads that open only to an active licence · OpenCoperLock deploys from its own page, and every server gets an HTTPS address · certification program (27 tracks × 4 levels × 5 real-project briefs) · news feed with RSS The highest written/kept ratio on this page, 2.59×: the redesign removed more code than it added. |
|
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 34k lines of tests against 66k 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. |
|
A voxel arena for four kingdoms: five minutes to dig in, then an hour to break the other three hearts before they break yours. Each kingdom has a heart crystal, a base, and a shaft down into caves full of ore and creatures. For the first five minutes no player can touch you: you mine, you fortify, you go down. Then it all opens — walls come down, charges go against hearts, a boss wakes at minute 35 and sides with nobody, a storm takes the light for the last ten minutes, and sudden death settles what's left. The map is generated for every match; one player hosts and the others type in the address. The choice everything else follows from: solo is the server. Godot runs a single-player game as a server without a line of networking code, so there was never an "add multiplayer later" step — every rule was written once, on the server, from the start. The price is where the bugs hide. In solo the server is the player, so anything decided on the wrong side of the network passes every test: a client took fall damage on a hay bale the host landed on safely, and the death screen came up twice, but only on the machine that wasn't hosting. The checks that count now load the real game, and one of them starts a second copy and connects the two. 70-minute matches, 2 to 16 players · each machine owns its player's position and the server clamps what it claims · other players are drawn about a tenth of a second behind, a delay sized from the connection's own jitter, so they don't stutter on a poor line · a custom skin crosses the network once, keyed on its content, so nobody downloads a picture they already have · Minecraft resource packs drop in · controller support More code checks the game than is the game: 161k lines of tests, labs and benchmarks against 141k lines of game. |
|
Cooperative survival for Minecraft guilds: plant a flag, hold the base through the night, and put the villagers to work. A guild founds its base with a flag, the heart it has to defend, and grows its land chunk by chunk
with more flags. Every night a horde comes for that heart, drawn from seven themes and a little
harder each time, with elites and a boss under its own bar; some nights are blood nights. In
between, the villagers work: they sort the chests, dig a real mine down a spiral staircase, and
raise a The choice everything else follows from: nothing to install on the player's side. The mod runs on the server alone, so players join with the unmodded game, and every screen is built from what vanilla Minecraft can already show: chest menus, titles, the action bar, boss bars, clickable chat. The one thing that can't be done that way is a new look — the unique weapons only get their own textures through an optional resource pack, and they play the same without it. Guild levels up to 100 · 8 ruins in the Overworld and the Nether, each with a boss that comes back harder · unique weapons with serial numbers, never dealt twice to the same guild · 19 single-use spell scrolls · every setting in commented JSON5, reloaded without a restart · LuckPerms permissions 257 of the 1,190 tests are GameTests: they boot a real Minecraft server and check the mod inside a test world. |
| Project | Lines counted | Effort | Rebuild cost | Written / kept |
|---|---|---|---|---|
| Capibara | 1 012 733 | 344 person-months | ~4.47 M€ | 1.18× |
| Fallended | 357 433 | 76 person-months | ~982 k€ | n/a |
| Guildy | 211 756 | 71 person-months | ~917 k€ | 1.11× |
| Marcus | 124 945 | 60 person-months | ~783 k€ | 2.02× |
| Forge Network | 69 841 | 46 person-months | ~595 k€ | 2.59× |
| Elipse RSAI | 110 802 | 34 person-months | ~441 k€ | 1.09× |
| OpenCoperLock | 28 147 | 10 person-months | ~130 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. Blank lines cost nothing, and a comment is billed at the documentation rate rather than at the rate of the code it explains. A game is sorted with its own table, one for Godot and one for Minecraft mods: it has no billing or compliance code, and those keywords would only misfile it — "verify" would put 77 test gates under security, and "merchant" a travelling trader under billing. 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 — 344 person-months is roughly what a team of ~86 delivers in four months.
Three 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. On Capibara, payment, security and compliance code is 12 % of the lines but 28 % of the estimate — which is exactly why a flat average would have been worthless here. And Fallended's git history starts with a backup of the whole project on 17 September 2026, so its written/kept ratio can't be measured and its estimate carries almost no rework — one more reason it errs low.
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
Counted across the ten repositories behind this page — 1 791 906 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 Forge Network on the basis of real, delivered projects.
Verifiable at forgenet.fr/verify/OPUS-2026-Z26F2D


