Not online yet: the demo runs locally
Bringing workers and customers together around work, and training on the job. What you can do is on your profile, confirmed by someone who can do it independently.
The Maze-Guild brings together people who do work and people who need work done, and trains them in that work. A customer posts work; the Guild proposes experienced workers nearby who can do it, where possible together with an apprentice; the customer chooses, the worker accepts. After the work the customer reviews it, and the experienced worker confirms what the apprentice did. What you can do is on your profile, confirmed by someone who can do it independently. That profile replaces the CV.
There are two environments. In the demo you choose a fictional person; everything is made up. In the live environment you log in with a link in your email; administrators and organisations also use a code from an app there (the second factor).
To doThe first tab in every role: what is asked of you now. A customer sees proposals to choose, deliveries to review, a schedule or time slot to confirm and work that ends soon. A worker sees offers, work to report done, an apprentice to confirm, an extension to answer and a certificate that expires. The administrator sees admissions, disputes, open gaps, expiring certificates and possible duplicates. The arrow takes you to the work.
NotificationsEvery notification in the tool. With "Notifications by email too" (under My data) you also get them by email.
My dataYour profile; everything recorded about you, including who viewed your profile and when; deleting your data. Workers and apprentices give their age here as a group (16 or 17, or 18 or older): only needed because some work may not legally be done by someone under 18; customers never see it. Here you also report an absence (no reason needed), set up the second factor, and a worker creates an invitation link for an apprentice or colleague (you only see whether it was used; there is no reward).
/handleidingThis manual, at the Guild's own address. The EN or NL button switches the language.
/controleer.htmlA public page: whoever received an export of demonstrated work enters the verification code and chooses the file. The page says whether the export is unchanged. The file stays in the browser.
My workYour work with its status. On a piece of work: Find workers (proposals, or a gap with the reason), the proposals with profile and distance, choosing, reviewing deliveries and confirming the hours. Below: Messages with the worker and apprentice; the Work agreement as pdf, which customer and worker sign in the tool; Time slots the worker offers (choose one and put it in your calendar with the .ics); for ongoing work the Schedule (which half-days), Extend, Close work and Request a replacement when the worker is absent.
Post workType of work, postcode or location, description, photos, one-off or ongoing (half-days per week and duration), period, and whether an apprentice is welcome.
Organisation overviewAll work of the organisation per location; add locations and invite users.
OverviewPer month: posted and matched work, confirmed hours with satisfaction, confirmed levels, and per location who comes when (the schedule). Export hours (csv) gets the confirmed hours for payroll or invoicing. The Guild calculates no wages.
IntegrationsYour organisation's Chamber of Commerce number; API keys (read-only, shown once) and webhooks to your own systems. See the layer for the connector.
CircleBalance and entries in seeds, the annual tax overview, and standing guarantee for a training.
OffersProposals to you, with the reasons (skills, certificate, distance, half-days). As a worker you choose how you want to be rewarded: exchange in seeds, voluntary, or in euros.
AssignmentsYour work with reported and confirmed hours and the last delivery. On an assignment: ask for help when an expectation fails, report work done with hours and photos, confirm your apprentice's level (with a note only the apprentice sees), lessons, cases and failures from the trade, record a case, and the same blocks as the customer: messages, work agreement, time slots (offer), schedule and an extension proposal.
CallsFor a worker on call: other people's help requests, accept and watch live.
Cases and LessonsSearch (also by language), record with video, and on every item Questions: question and answer between workers and apprentices; the maker is notified. Customers see none of this.
ProgressFor an apprentice: levels per skill with confirmations and notes, and work that fits now.
TalentWork you can do independently, learning routes, work that needs a certificate, and training.
OverviewThe same figures as an organisation, across everything, plus the shortage analysis: open gaps per skill and the number of workers and apprentices per level and kind of work. Counts, no forecast.
Gaps, Circle report, People, Operator, Catalogue, Privacy, LedgerResolve gaps; steer the circle; admit, deactivate and record certificates; licences; the catalogue (also the occupation per work type and whether work is 'not under 18'); the three privacy documents; the ledger with chain check.
ChecksRecord an identity check (service, date, outcome: never an image or document number); refuse a sign-up with a reason the person sees; run the daily task now; merge possible duplicates; ongoing work without a valid certificate.
IntegrationsAPI keys and webhooks for everything.
One continuous relation between worker, customer, work and learning. The test for every function: does it strengthen that relation, and does it stay within the law?
Where it comes from. The Guild is a spin-off of the Maze-Bank (the idea: value stays in the circle of people, short loops, cooperation at a human scale) and of SWARP Support (working parts: account, profile, occupation list, learning from cases). Work, craft and learning are a community's real float; intermediaries now take much of it.
Learning from failure. After Roger Schank: you learn when an expectation fails, and you remember the lesson as a story. Hence the cases (what did you expect, what happened, how did you solve it, what will you do differently), the ladder for a help request, and the failures from the trade.
People decide. The Guild proposes, counts and reports. Choosing, accepting, admitting, confirming and deciding a dispute are done by people, and every decision is in a hash-chained ledger that can be redacted under the GDPR.
Deliberately outside the Guild, and why: personality tests and automated CV screening (judging on traits; high-risk under the AI Act, Annex III point 4); emotion recognition (banned at work, AI Act Art. 5(1)(f)); biometrics such as face matching (special-category data); age as a matching criterion (Dutch WGBL Art. 3); harvesting profiles from other sites; paying wages itself (the operator does that outside the Guild).
Age. The only place age counts is a legal prohibition: work young people under 18 may not do. For that the Guild knows two states, 16–17 and 18 or older, in the private layer; no birth date. That way the Guild follows the rules for young workers without letting age weigh in.
Every refusal names the rule. These are all of them (the Dutch wording in the code is leading):
A standalone Node application (Node 20, one dependency: pg). One server is one environment (GUILD_OMGEVING=demo|echt) with its own Postgres database.
src/server.mjs — HTTP, sessions, the second factor, API keys, routes; every route carries a key from src/rechten.mjs.src/guild.mjs — the core: posting, matching (with absence and 'not under 18'), choosing, delivering, levels, lessons, cases, GDPR, retention, the demo.src/dienst.mjs — the v8 service layer: messages, questions, verification code, overviews, hours export, actions, daily task, work agreement and signing, checks, Chamber of Commerce, time slots, schedule, absence, extension, invitation links, duplicates, API keys, shortage analysis.src/grootboek.mjs (hash chain, a commitment per field, redactable), src/kring.mjs (the circle), src/hulp.mjs (the ladder and live video), src/video.mjs, src/support.mjs (Swarp Support), src/mail.mjs, src/totp.mjs, src/oidc.mjs, src/webhook.mjs, src/pdf.mjs (own pdf writer).public/ — the page (NL/EN) and controleer.html; docs/ — plans (each hashed before the code), test report, specification and this manual (scripts/handleiding.mjs).scripts/backup.mjs and scripts/terugzet-toets.mjs — encrypted backup (AES-256-GCM, 35 days) and a restore test that checks the ledger chain.Settings: DATABASE_URL, GUILD_OMGEVING, GUILD_SLEUTEL (required live), GUILD_URL, BREVO_API_KEY and MAIL_FROM, OPENAI_API_KEY, SUPPORT_URL and SUPPORT_GEHEIM, GUILD_OIDC_ISSUER/_CLIENT_ID/_SECRET, KVK_API_KEY, GUILD_BACKUP_SLEUTEL, GUILD_ACHTER_PROXY, GUILD_DAGTAAK=uit (tests only).
Hosting: in the EU (Render, Frankfurt region), behind https (the server then sets HSTS). Data at rest is encrypted by the host's database; backups are encrypted by the Guild itself. A third-party security test belongs before the first real users.
Tests: node toets/toets.mjs runs all acceptance tests against two empty test databases, with a simulated Swarp Support, a simulated identity provider, a webhook receiver and a simulated Chamber of Commerce. Test DR checks that this manual names every route and every rule.
Logging in for systems. An organisation or the administrator creates an API key under Integrations. Use: Authorization: Bearer gld_…. A key is read-only, and only for: overzicht, export.uren, werk.mijn, organisatie.overzicht, acties. GET /api/beschrijving returns all routes with their rights as JSON.
Webhooks. Events: werk.gemeld, voorstel.gekozen, werk.gekoppeld, oplevering.gemeld, oplevering.beoordeeld, niveau.bevestigd. The body is { soort, werk, …ids, op }, without names. Check the header x-guild-handtekening:
const ok = header === "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
A receiver that does not answer 2xx gets the event twice more, with increasing pauses.
Logging in via the organisation (SSO). OpenID Connect with PKCE; redirect address <GUILD_URL>/api/oidc/terug; scopes openid email profile; RS256 only. SAML is not supported.
Swarp Support. The Guild reads occupations and failures with the shared secret (x-swarp-secret) via /api/beroepen/namens and /api/failures/namens.
Signing with a service. The Guild signs itself with a simple electronic signature (hash of the pdf). A qualified signature needs a contract with a service; the field ondertekening.dienst is reserved for that.
Verification code. GET /api/controleer?code=GLD-… returns name, date and hash. The hash is sha256 of the export without the field controle, as JSON without spaces in the order of the file.
Method, path, rights key, who may, and what it does. On top of these rights, object rights apply (a customer sees only own work, a worker only work they are matched to).
inlog.vraag · anonieminlog.bevestig · anoniemaanmelden · anoniemdemo.personen · anoniemdemo.als · anoniem, klant, organisatie, werker, leerling, beheerder, wachtdemo.opnieuw · beheerderik · klant, organisatie, werker, leerling, beheerder, wachtuit · klant, organisatie, werker, leerling, beheerder, wachtrol · klant, organisatie, werker, leerling, beheerder, wachtcatalogus · klant, organisatie, werker, leerling, beheerder, wachtcatalogus · klant, organisatie, werker, leerling, beheerder, wachtmijn.profiel · klant, organisatie, werker, leerling, beheerder, wachtmijn.profiel.wijzig · klant, organisatie, werker, leerling, beheerder, wachtmijn.inzage · klant, organisatie, werker, leerling, beheerder, wachtmijn.verwijder · klant, organisatie, werker, leerling, beheerder, wachtmijn.export · werker, leerlingprofiel.bekijk · klant, organisatie, werker, leerling, beheerderwerk.meld · klant, organisatiewerk.mijn · klant, organisatiewerk.zie · klant, organisatie, werker, leerling, beheerderwerk.koppel · klant, organisatiewerk.voorstellen · klant, organisatievoorstel.kies · klant, organisatieoplevering.beoordeel · klant, organisatieorganisatie.overzicht · organisatiewerker.aanbod · werker, leerlingvoorstel.akkoord · werker, leerlingwerker.opdrachten · werker, leerlingopdracht.zie · werker, leerlingopdracht.afmelden · werkeropdracht.bevestig · werkerles.maak · werkerles.lijst · werker, leerlingcase.maak · werker, leerlingvideo.upload · werker, leerlingvideo.zie · werker, leerling, beheerdervak.failures · werker, leerling, beheerdercase.zoek · werker, leerlingleerling.voortgang · werker, leerlingtalent · werker, leerlingbeheer.catalogus · beheerderbeheer.personen · beheerderbeheer.toelaten · beheerderbeheer.deactiveer · beheerderbeheer.erkenning · beheerderbeheer.gaten · beheerderbeheer.gat.afhandelen · beheerderbeheer.privacy · beheerderbeheer.privacy · beheerderbeheer.grootboek · beheerderbeheer.keten · beheerderbeheer.anker · beheerderbeheer.anker · beheerdermelding.lijst · klant, organisatie, werker, leerling, beheerder, wachtmelding.gelezen · klant, organisatie, werker, leerling, beheerder, wachtorganisatie.locatie · organisatieorganisatie.lid · organisatiekring.mijn · klant, organisatie, werker, leerling, beheerderkring.rapport · beheerderkring.cyclus · beheerderkring.instellingen · beheerderopleiding.lijst · klant, organisatie, werker, leerling, beheerderopleiding.maak · beheerderopleiding.borg · klant, organisatieopleiding.start · beheerderspraak · werker, leerlingcase.concept · werker, leerlingles.concept · werkeraanwezig · werkerhulp.vraag · werker, leerlinghulp.helpt · werker, leerlingoplevering.betaal · klant, organisatie, beheerderhulp.stand · werker, leerlinghulp.helpt · werker, leerlinghulp.oproepen · werkerhulp.aanneem · werkerhulp.sein · werker, leerlinghulp.sein · werker, leerlinghulp.toestemming · werker, leerlinghulp.momentopname · werker, leerlinghulp.oplossing · werkerhulp.momentopname · werker, leerlingbeheer.geschil · beheerderuitnodiging · klant, organisatie, werker, leerling, beheerder, wachtuitnodiging · klant, organisatie, werker, leerling, beheerder, wachthulp.bevestig · werkerleerling.uren · werker, leerlingbeheer.leerling.uren · beheerderbeheer.erkenningen · beheerderbeheer.erkenning.intrekken · beheerderbeheer.gaten.export · beheerderbeheer.exploitant · beheerderbeheer.exploitant · beheerderbeheer.rand · beheerderacties · klant, organisatie, werker, leerling, beheerderoverzicht · organisatie, beheerderexport.uren · organisatie, beheerderbericht.lijst · klant, organisatie, werker, leerling, beheerderbericht.stuur · klant, organisatie, werker, leerlingvraag.lijst · werker, leerling, beheerdervraag.stel · werker, leerling, beheerdercontroleer · anoniem, klant, organisatie, werker, leerling, beheerder, wachtbeschrijving · anoniem, klant, organisatie, werker, leerling, beheerder, wachttfa.start · klant, organisatie, werker, leerling, beheerdertfa.bevestig · klant, organisatie, werker, leerling, beheerdertfa.code · klant, organisatie, werker, leerling, beheerderoidc · anoniem, klant, organisatie, werker, leerling, beheerder, wachtoidc · anoniem, klant, organisatie, werker, leerling, beheerder, wachtoidc · anoniem, klant, organisatie, werker, leerling, beheerder, wachtsleutel · organisatie, beheerdersleutel · organisatie, beheerdersleutel · organisatie, beheerderwebhook · organisatie, beheerderwebhook · organisatie, beheerderwebhook · organisatie, beheerderafspraak.zie · klant, organisatie, werker, leerling, beheerderafspraak.zie · klant, organisatie, werker, leerling, beheerderafspraak.teken · klant, organisatie, werkerbeheer.controle · beheerderbeheer.controle · beheerderorganisatie.kvk · organisatietijdvak.lijst · klant, organisatie, werker, leerling, beheerdertijdvak.bied · klant, organisatie, werkertijdvak.bied · klant, organisatie, werkertijdvak.lijst · klant, organisatie, werker, leerling, beheerderrooster · klant, organisatie, werkerrooster · klant, organisatie, werkerafwezig · werker, leerlingafwezig · werker, leerlingafwezig · werker, leerlingwerk.vervanging · klant, organisatiewerk.verlengen · klant, organisatiewerk.verlengen · klant, organisatieopdracht.verlengen · werkeruitnodiging.link · werkeruitnodiging.link · werkermijn.toelating · klant, organisatie, werker, leerling, beheerder, wachtbeheer.toelaten · beheerderbeheer.dubbelen · beheerderbeheer.dubbelen · beheerderbeheer.dagtaak · beheerderbeheer.erkenningen · beheerderbeheer.gaten · beheerder