Community guide

Challenges, help, exams and shared material

How the community half of ZNetLab works — every screen, every rule and every address, written down once so the screen itself does not have to explain itself.

All of it needs a ZNetLab account, and all of it is free. The simulator itself still needs no account at all: labs at /learn/ run in your browser whether you sign in or not. What signing in adds is other people — a challenge somebody set you, an answer to a question, a study group, a shelf of shared notes.

Where everything is

Two places, and they do different jobs. The portal is where people and records live; the simulator is where the work happens.

ScreenAddressWhat it is for
Portal/community Everything below, on one page.
Community → Challenges/community Challenges people set each other, by category.
/community → Helpsame screen, Help tab Questions, their conversations, and your inbox.
Community → Materialsame screen, Material tab Links, notes and files people study from.
Community → Examssame screen, Exams tab Study groups, their papers and the marking.
Community → Leaderboard / Mesame screen Standings, and your own rank, badges and readers.
Simulator/learn/lab Where a lab or a challenge is actually built.
A challenge, opened/learn/lab#challenge:<id> The challenge's own topology, loaded and ready.
Marketing → Video & images/lab/ → Admin portal → Marketing The social library and the A–Z post generator.

Challenges

A challenge is a lab you built, published for other people to rebuild. It sits in one of the five categories the built-in labs already use — Enterprise, Telecom, Service Provider, Automation, Custom — so it is found beside the labs it belongs with.

Setting one

1. Build it in the simulator Open /learn/lab, build the topology, and — if you want it marked automatically — add an activity: assessment items and connectivity tests, the ones behind Check Results.
2. Save it File → Save to computer gives you a .nblab file. That one file carries the topology, every device's configuration and the checks.
3. Publish it /community → Challenges → Set a challenge. Give it a title, a category, how hard it is, one paragraph saying what has to be true at the end, and the .nblab file.

Solving one

1. Open it Open it in the simulator loads the challenge's own topology into /learn/lab and puts a bar across the top saying what it is worth. Opening it is counted as an attempt.
2. Do the work Configure, test, break things. Nothing is timed.
3. Record it If the author included checks, press Check my work — the bar shows how far along you are, and offers Record the solve once every check passes. If they did not, the bar offers I have solved it instead, and says plainly that there was nothing to check.
Points are given once per challenge, and never for your own. The author earns 2 points every time somebody else solves theirs — enough to make writing good challenges worth it, small enough that two friends solving each other's in a loop earn less than doing the work.

Help

Help is a category like any other, and a request for help opens a conversation that reads like a chat: messages in order, by name, anybody may reply.

WhatHow
Ask/community → Help → title, what you tried, what happened. Say the lab or challenge it is about and the answer comes faster.
ReplyOpen the conversation and write. Everybody already in it is notified, not only the person who asked.
Mark the answerOnly the person who asked, and only one per conversation — so ten helpful replies to one problem are not ten Mentor points.
Close itThe asker, when it is done. It can be reopened.
Remove a messageIts author. The row stays as removed so the replies that answered it still make sense.
A notification is written down, not pushed. The person who asked at midnight and closed the laptop is exactly who an answer is for — so every notification is stored against the account and is still waiting when they come back. The unread count sits next to Community in the portal's navigator. Email is a second delivery on top of that, and only goes out when the server is started with --smtp.

Exams

Ten to fifteen people join a group, every one of them writes a paper, and everybody sits the papers the others wrote. Writing a question is harder than answering one, so the group learns twice and nobody has to be the teacher.

The three duties

Everybody in a group owes the same three things, and the screen shows which are outstanding:

DutyDone when
Set a paper for the groupYou have published at least one.
Sit every other member's paperNone of theirs is left unsat.
Mark the open answers on your own paperNothing of yours is waiting.

Writing a paper

A paper is JSON, written in the box on the group screen — the form starts with a working example you can edit. Three kinds of question:

KindCarriesMarked
mcqoptions and answer, the index of the right oneThe moment it is handed in
shortanswer, plus any answers you will also accept The moment it is handed in — case and spacing are ignored
openno answer key, and a guide note to yourselfBy you, afterwards
{ "questions": [
  { "kind": "mcq",   "text": "Which protocol resolves an IP to a MAC?",
    "points": 2, "options": ["ARP","DNS","DHCP","NTP"], "answer": 0 },
  { "kind": "short", "text": "Which TCP port does BGP use?", "points": 2, "answer": "179" },
  { "kind": "open",  "text": "Explain why OSPF will not adjacency with mismatched MTUs.",
    "points": 4, "guide": "Looking for: DBD exchange, EXSTART." }
] }

Sitting one

Press Sit it. The paper arrives without its answer key — the marking happens on the server, and a paper handed out with its answers is not an exam. Hand it in and the multiple choice and short answers are marked immediately; the open ones go to whoever set the paper. You see the key only once everything is marked.

You cannot sit your own paper, and you cannot sit one twice. A paper handed in after its time limit is marked anyway and recorded as late — throwing away an hour's work over a clock somebody was not watching would be the wrong trade.

Material

One list of everything shared about a subject: a link, a page of notes, or a file. Filed by the same categories, ranked by how many people found it useful.

KindWhat it takes
A linkhttp:// or https:// and nothing else.
NotesTyped or pasted. Line breaks are kept; it is shown as text, never as markup.
A filePDF, pictures, text, CSV, packet captures (.pcap) and saved labs (.nblab). Not HTML or SVG — those run in a browser.

Useful is one per person and can be taken back. It ranks the list, and the person who shared it earns 2 points when somebody marks it — writing the notes everybody uses is work too.

Points, ranks, badges and readers

What you didPoints
Solved a beginner challenge10
…intermediate25
…advanced50
…expert100
Somebody solved a challenge you set2
Sat an exam paper5
Somebody sat a paper you set3
Marked somebody's answers2
Somebody found your material useful2
RankAt
Newcomer0
Apprentice100
Technician300
Engineer750
Senior Engineer1 500
Architect3 000
Principal6 000

Badges mark different things on purpose, so a wall of them does not say one thing six times: First solve, Ten solves, Fifty solves, Author (published a challenge), Set the pace (five published, each solved by somebody), Mentor (answered ten requests for help), Well read (ten readers), All-rounder (solved something in every category), First light (first person to solve a challenge).

Readers are the people who follow what you publish. Click anybody's name anywhere on the screen to see their profile and read them.

A–Z posts for social media

Twenty-six networking topics, A to Z, each as a 1080×1350 picture and a fourteen-second clip, filed into the social library with a caption ready to paste.

WhereWhat it does
Admin → Marketing → Video & images Upload from your machine, download anything, and the A–Z generator. Rendered in your browser: Chrome and Edge produce MP4, Firefox and Safari only WebM.
node tools/make-posts.js The same posts made on the server, no browser needed. --all remakes all twenty-six, --only A,V picks some. It stops the server for the few seconds it files them, and starts it again through server/start.sh.

Every URL

Pages

AddressWhat
/The site.
/learn/The labs and the browser simulator.
/learn/labThe simulator on its own.
/learn/lab#challenge:<id>A challenge, loaded.
/lab/Real labs on real images, on the lab server.
/lab/ → AccountsEvery account on the server, for administrators.
/profile.htmlYour own details.
/login.htmlSign in.
/plans.htmlPlans and prices.
/guide.htmlThe product guide.
/community-guide.htmlThis page.
/noc/The operations screen.
/sitemap.htmlEvery page.
/policies.html, /terms.html, /privacy.html, /licenses.htmlThe legal documents.
/docs/…The long-form guides.

The API

Every route below needs a signed-in account and nothing more — these are what a registered account is for, not an administrator's screen. Send the session as Authorization: Bearer <token>.

Challenges, people and conversations

MethodRouteWhat
GET/api/communityCategories, levels, ranks, your profile, unread count.
GET/api/community/challengesList. ?category= &level= &mine=1 &solved=1 &unsolved=1
POST/api/community/challengesPublish one. Takes the .nblab as document.
GET/api/community/challenges/:idOne, with its document.
DELETE/api/community/challenges/:idTake yours down.
POST/api/community/challenges/:id/attemptCount an attempt.
POST/api/community/challenges/:id/solveRecord a solve.
GET/api/community/leaderboardStandings. ?limit=
GET/api/community/people/:userIdSomebody's profile and challenges.
POST / DELETE/api/community/people/:userId/followRead them, or stop.
GET/api/community/threadsConversations. ?category= &lab= &challenge= &mine=1 &in=1 &open=1 &unanswered=1
POST/api/community/threadsAsk for help.
GET/api/community/threads/:idOne, with its messages.
POST/api/community/threads/:id/replyReply.
POST/api/community/threads/:id/acceptMark the answer. {messageId}
POST/api/community/threads/:id/close · /reopenClose or reopen.
DELETE/api/community/threads/:id/messageRemove a message. {messageId}
GET/api/community/inboxWhat was waiting. ?unread=1
POST/api/community/inbox/readMark read. {ids}, or none for all.

Exams

MethodRouteWhat
GET/api/examsYour groups with their duties, and the ones open to join.
POST/api/exams/groupsStart a group. {name, subject, target}
GET/api/exams/groups/:idMembers, papers, your duties, everybody's duties, results.
POST/api/exams/groups/:id/join · /leaveJoin or leave.
GET/api/exams/groups/:id/dutiesWho still owes what.
POST/api/exams/groups/:id/papersSet a paper. {title, minutes, document}
DELETE/api/exams/papers/:idTake yours down, while nobody has sat it.
POST/api/exams/papers/:id/startStart sitting it — returns the paper without answers.
GET/api/exams/sittings/:idA sitting, as you are allowed to see it.
POST/api/exams/sittings/:id/submitHand it in. {answers}
POST/api/exams/sittings/:id/markMark the open answers. {marks}
GET/api/exams/dutiesEverything owing across every group.

Material

MethodRouteWhat
GET/api/materialThe list. ?category= &kind= &group= &lab= &mine=1 &q=
POST/api/materialShare a link or notes. {kind, title, url|note, category, tags}
PUT/api/material/fileUpload a file — the body is the file, the rest is query string.
GET/api/material/:idOne item, with a note's text.
GET/api/material/:id/fileThe bytes. ?dl=1 to save rather than view.
POST/api/material/:id/usefulMark useful, or take it back.
DELETE/api/material/:idRemove yours.

Limits

ThingLimit
A challenge document4 MB · 300 published per account
A reply or a question4 000 characters · 2 000 messages per conversation
Conversations open at once50 per account
Notifications kept200 per account, newest first
A study group15 members · a target you set, 10 by default
A paper60 questions · 20 papers each, per group
Shared filesPDF and captures 25 MB · pictures 12 MB · saved labs 8 MB · text 2 MB · the whole library 2 GB
Shared notes40 KB
The social librarypictures 12 MB · clips 220 MB · 6 GB in all

What it does not do

A challenge solve is marked in your browser. The simulation engine only runs in a page, so when the author included checks the machine decides and when they did not, the solve is a claim you make. Points are given once per challenge and never for your own, so the most an untrue claim ever buys is that one challenge.

Email needs SMTP. Notifications always reach the portal. They are also emailed, but only when the server was started with --smtp; without it the message is written to work/outbox as a file and nothing is sent. The portal's inbox never depends on mail working.

Something here wrong or missing? /community → Help, or the product guide.