For managers¶
A manager sees who holds each item, in which room, since when, its full history and its Bluetooth tracker, in every lab. Editing is narrower: their own lab and the common pool.
The extra menu is Manage in the top bar.
Adding and editing equipment¶
Add equipment on the front page creates an item. The LA-####
identifier is assigned on save, and the QR label follows from it.
Edit on an item’s page changes one that exists.
Worth filling in, because none of it comes from the spreadsheet:
- Keeping place
Where the item lives when nobody has it. This is what the item’s page means by “should be in”.
- Notes
Anything a borrower needs to know before taking it. Shown prominently rather than buried in the specification table.
- Our documentation
A link to your own instructions for the instrument. Appears on the item’s page as How to use this, next to the manufacturer’s datasheet, which answers a different and less urgent question.
- Bluetooth tracker
The tracker’s name and a link into the vendor’s app. Manager-visible, since a tracker is a way of finding out where a colleague has taken something. The catalogue never asks a tracker network anything itself.
- Tags
Free-form labels, for the groupings the spreadsheet’s categories do not capture: a modal testing kit, everything that goes to a particular test rig. Tags are how people find equipment by purpose rather than by type.
- Label stuck on
Whether the printed QR sticker is actually on the item. Nothing works this out for you — printing a sheet says a label was drawn, not that anybody cut it out and stuck it on — so somebody ticks it once the job is done. It pays for itself at the label printer: see Printing labels below.
Specifications are edited on the same form, with a label, a value and an order. They are the rows shown in the specification table and the fields that All filters searches.
Editing many items at once¶
Under All filters, narrow the list until it contains exactly the items you mean, then use the controls above the results:
- Tag all of these
Add tag applies a tag to every match, Remove tag takes it off every match. New tags are created by typing them.
- Give all of these to
Sets the owning lab for every match, or makes them Common — shared by everybody. Admin only.
- The printed labels on all of these
Sets Label stuck on for every match, or clears it. This is the second half of a labelling round: filter to Label: no label yet, print that sheet, stick the stickers on, then come back to the same filter and mark the lot. Doing it one edit page at a time is why the field would otherwise never be true of anything.
- Say all of these are kept in
Sets the keeping place for every match — a drawer’s worth of sensors that has moved rooms, in one pass. It changes where things live, not where anything currently checked out is.
They act on every item the filter matches, not only the ones visible on screen, and each shows what it is about to do first. The search box narrows them like any other filter: typing a manufacturer and tagging the result is one pass.
The Label filter beside them is worded to match the label picker’s own tick, deliberately: narrowing to No label yet here gives exactly the selection Only items with no label on them yet gives there, so printing and marking are the same filter run twice rather than a list of identifiers carried between two pages by hand. Only managers see it.
Categories¶
lists every category under its heading, the same headings the front page groups by, so a category is where the sidebar already put it. Categories nobody has filed come last. The list shows how much each holds and what identifies an item in it.
What identifies an item. The serial number does not always identify anything. An NI module’s row carries a serial from the spreadsheet, and that number appears nowhere on the card; what is printed on the card is its code. So a label reading “S/N HB1317127” names nothing you can match against the card in your hand, and searching for the number you can read finds nothing.
Open the category and set identified by. The choice is Serial number — which is what almost every category wants and what they all start on — or any one of that category’s own parameters, Koda say. Whatever is chosen is used everywhere an item is identified: on the printed label, in the summary line of every listing, and in what the search box matches. Choosing a parameter replaces the serial rather than filling in for a missing one, because a manager choosing it is saying “that number is the one people can actually read”.
Nothing is lost by it. The serial number keeps its own row in the item’s specification table, and the search still matches both.
The dropdown offers the parameters the category’s equipment actually carries, so a name that matches nothing cannot be chosen by accident.
Adding a category. For equipment the spreadsheet does not cover — a batch of LED reflectors, say. Give it a name, list its parameters one per line, and say whether things in it are lent or assigned. Those parameters become the specification rows offered when somebody adds an item to it. A category added here is separate from the spreadsheet and stays that way; rows imported later still make their own categories as before.
Filing it under a heading. The front page groups categories under headings, and for the imported ones the heading is the spreadsheet tab they came from — Ostalo holds twelve. Filed under says which heading a category joins. Pick one that exists, or type a name in or a new heading to start one; typing wins over the choice above it, and a name that differs only in its capitals joins the heading that is already there rather than opening a second one beside it.
Leave both empty and the category gets a heading of its own, which is right for something that stands alone and wrong for the fourth one-off in a row. The heading can be changed later on the same page, for imported categories too — it does not touch where the category came from, which is what the item page reports as imported from.
Its colour. The category leads the detail line of every row in an equipment list, and colour is what its name is printed in there. All 48 of them were the same red once, which said this is a category and nothing about which one; they now start with one colour per heading, so Sila and Pomik are told apart at a glance in a list of four hundred items.
Pick a colour that reads on a white page and leave the dark theme alone — it lightens the same colour for you. A category added afterwards starts on the brand red. Nothing else uses the colour: it is a reading aid in listings, not a status.
Categories are never deleted here. Equipment points at one, and an empty category costs a line on a page only managers open.
Note
The parameters of an imported category cannot be edited yet: they are learned from the rows themselves, and a second list here could only disagree with them. That is on the list to revisit once the catalogue no longer reads from the spreadsheet at all.
Locations¶
keeps two lists: the rooms equipment is used in, which the checkout form offers, and the rooms equipment is kept in, which is where an item belongs when it is free.
Managers add and rename; only an admin deletes. A rename is safe and fixes everything referring to it at once. Deleting is not, which is why it sits a tier higher.
Importing from the spreadsheet¶
imports rows from the shared Merilna oprema spreadsheet.
Note
The nightly import is switched off as of 31 August 2026. The spreadsheet is no longer where work happens — equipment is added and corrected here — so the scheduled job had nothing left to find, and its only remaining output was a failure notice every morning.
Sync now is unaffected and imports exactly as it always did. The checkbox under it turns the nightly job back on, and nothing already imported changes either way.
The import is insert-only. Rows already imported are never touched again; from the moment an item exists here, this catalogue owns it. Nothing is written back to the spreadsheet.
A row is recognised by its sheet, category, manufacturer, model and serial number taken together. Correcting one of those five cells in the spreadsheet therefore makes the row look new and imports a second copy of the item. Corrections belong here, not in the sheet.
The page lists recent runs, what each imported and what it skipped, and whether each was somebody pressing the button or the schedule.
Re-importing one item¶
An item’s page offers a re-import, which shows a field-by-field difference against the spreadsheet before anything happens. Anything corrected by hand in those fields will be overwritten, and the page says so. Use it when a row was imported before somebody fixed it upstream.
Printing labels¶
produces an A4 sheet of stickers. Choose the label size, the categories to cover, and optionally a keeping place to narrow them further. The number above the button is how many labels the current selection comes to — exactly, with every filter counted, so it is worth reading before spending a sheet of stickers.
Only what is still to do. Only items with no label on them yet keeps the items nobody has ticked Label stuck on for. That is the pass worth having a month after a category was first labelled: it gains four items and reprinting the category otherwise means reprinting all forty. It narrows the categories rather than replacing them, and it is ignored when identifiers are typed — somebody who typed eight asked for those eight.
Once the stickers are on, say so in one go rather than item by item: the same narrowing under All filters carries a The printed labels on all of these control beside it. See Editing many items at once above.
The sheet opens in a new tab, so the picker stays where it is: printing a second category is picking it and pressing the button again, not finding your way back.
Particular items. The box at the top takes identifiers typed or pasted
straight in — LA-0012, LA-0104, LA-0198, separated by commas or spaces —
which is the pass that follows filing four new sensors and wanting their four
stickers. Filling it in prints exactly those and ignores the categories below,
so it replaces the ticks rather than narrowing them. An identifier that matches
nothing active is reported back with the box still filled in: a sheet of seven
labels looks exactly like a sheet that was meant to have seven, so the eighth
going missing has to be said out loud.
Label sheets that are already cut. Custom is for stock bought by the box, where the geometry was decided by whoever made it. Type the five measurements printed on the packet — the label’s width and height, the gap between labels, and how far the first one sits from the top and left of the page — and everything else follows from them. The width and height are the whole label, QR code and text together, not the symbol.
Nothing typographic is asked for, because nobody buys a sheet of stickers knowing what font size they want. The padding, the type sizes and how many lines fit are worked out from the size you gave; feed it 25 × 15 and you get the small label back.
Two things it will refuse, both because the alternative is four hundred ruined stickers. A label under 15 mm tall makes a QR code below the size a phone can reliably read — that is exactly the small label’s symbol, and it is already at the limit. And a label not much wider than it is tall has nowhere to put the identifier, since the code is square and fills the height; the message names the narrowest width that works at the height you asked for.
Print one sheet on plain paper first and hold it against the stickers. A millimetre out at the top is a millimetre out on every row, and it is much cheaper to find that out on paper.
Both preset sizes print the identifier, the serial number where the catalogue has one — or whatever the category nominates in its place, see Categories above — and the manufacturer and model. On the small 25 × 15 mm label the serial goes directly under the identifier and wraps across up to three lines if it has to: it is what tells two sensors of the same model apart, and half a serial is no use at a shelf.
The model gets a line of its own where the manufacturer and model do not fit on one. A shelf of Basler cameras is told apart by the model and by nothing else, so it is the last thing to be shortened rather than the first.
Approving accounts¶
lists people waiting. Approve them, set the lab they belong to, and give them a mentor if they are somebody’s student.
Decline answers no. The account is blocked rather than deleted, so the answer is on the record and an admin can reverse it with Let back in.
Either answer is emailed to the applicant, and the box beside the buttons adds a line of your own to that email: “use your faculty address”, or “welcome, ask Rok for the key”. It is optional and it is the only thing the applicant is told beyond yes or no, so a decline that needs a reason should carry one.
Clearing that queue is urgent and dull, which is why it is a manager’s job. Deciding who becomes a manager compounds, which is why roles are not.
One person’s page¶
Clicking somebody’s name opens their own page, and so does the holder’s name on an item that is checked out. It gathers three things this app could not answer before:
everything they currently have out, with the day each is due — the question an overdue item raises and the item’s own page cannot answer, since it knows about itself and nothing else;
the people they mentor, if any, and how much each of those is holding;
their action log, folded away and admin only — the last twenty entries of the log, with a link into the log itself for the rest.
It is a readout and nothing else. Everything about a person that can be changed — role, lab, mentor, blocking, the password manager link — stays on the Users page, so there is one place to change it and no second page to disagree with.
Managers and above can open it. That is the same line as everywhere else: who holds what, where they took it and when it is due is manager-visible, and this is that answer gathered by person rather than by item. Your own page is not an exception and you do not need one — Mine is that page, with the buttons to act on what it lists.
Password manager access¶
Admin only, and separate from everything else on this page: the shared password manager has its own accounts, so somebody can use the equipment catalogue for years without one. That is the point — the catalogue is open to students and the shared passwords are not.
Give password manager on a person’s row records it here, which makes the link appear for them, and then shows you what still has to be done in the password manager itself. This app cannot create an account there.
Adding somebody in the password manager is three steps:
Invite their address on the organisation’s members page — and in the same dialog, switch to the Groups tab and tick LADISK staff.
They accept from the email, choosing their own master password.
You confirm them.
Warning
Two of those three are easy to miss, and both fail the same way: the person logs in successfully and finds an empty vault, with nothing anywhere saying why.
The Groups tab is a second tab in the invite dialog that you are not required to visit, and the invitation sends perfectly happily without it. A member in no group has been given access to no collections, so there is nothing for them to see.
Confirming is the third step above. Until you do it, the organisation does not appear for them at all.
So when a colleague says the password manager looks empty, check both — in the organisation’s Members list, they should show as confirmed rather than “accepted”, and their row should list LADISK staff under groups.
Missed the group at invite time? Nothing is broken and nobody needs re-inviting: Members → click the person → Groups → tick LADISK staff → save. They see everything the moment they refresh.
Confirming exists for a real reason, which is why it cannot be automated away: it is when the organisation’s key is encrypted for the new member, and only somebody who already holds that key can do it.
Removing access is the same in reverse, and in the same order of importance: the button here only hides the link. Their account is removed in the password manager, which is where access actually lives.
Adding a collection¶
Credentials live in collections, and people reach them through the LADISK staff group. So a new collection needs one extra step:
Warning
Give the new collection to the LADISK staff group as soon as you make it. Nothing reminds you, and nothing looks wrong if you forget: owners and admins see every collection regardless, so you would file passwords into it, see them there, and nobody else would. It surfaces weeks later as “that password isn’t in the vault” when it plainly is.
In the organisation: Groups → LADISK staff → tick the new collection.
Nesting a collection under another one does not help. The tree you see is
drawn from the names — a collection called Instruments/Shakers simply sorts
under Instruments — and access is stored per collection. A collection inside
a shared one is invisible until it is shared in its own right.
To check nothing has been missed, on the server:
docker compose exec -T cron sqlite3 -header -column /vault-data/db.sqlite3 "
SELECT COUNT(*) AS unshared_collections, COALESCE(SUM(i.n),0) AS hidden_items
FROM collections c
LEFT JOIN (SELECT collections_uuid u, COUNT(*) n FROM collections_groups GROUP BY 1) g
ON g.u = c.uuid
LEFT JOIN (SELECT collection_uuid u, COUNT(*) n FROM ciphers_collections GROUP BY 1) i
ON i.u = c.uuid
WHERE COALESCE(g.n, 0) = 0;"
Zero is the answer you want. Anything else is a collection only owners and admins can see.