User manual
Everything this platform does, explained
Every formula below was read out of the running code. No number here is an estimate.
20 min read
Press / to search
Section 1
What this platform is
Pedigrees, race results and certificates for one club.
This is a record book for a racing pigeon club. You keep your own birds in it: their ring numbers, their parents, what they did in a basket, and what a vet did for them. The platform builds the family tree out of those parent links by itself, works out which of your birds throw the best children, and prints a certificate a buyer can verify by scanning a QR code.
| Capability | Guest | Member | Admin |
|---|---|---|---|
| Read this guide | Guest: Read this guide | Member: Read this guide | Admin: Read this guide |
| Scan a QR code and verify a certificate | Guest: Scan a QR code and verify a certificate | Member: Scan a QR code and verify a certificate | Admin: Scan a QR code and verify a certificate |
| Open a shared pedigree link | Guest: Open a shared pedigree link | Member: Open a shared pedigree link | Admin: Open a shared pedigree link |
| Create an account | Guest: Create an account | ||
| Add and edit their own pigeons | Member: Add and edit their own pigeons | Admin: Add and edit their own pigeons | |
| Record race results for their own birds | Member: Record race results for their own birds | Admin: Record race results for their own birds | |
| See their own scores and rankings | Member: See their own scores and rankings | Admin: See their own scores and rankings | |
| Generate certificates and share links | Member: Generate certificates and share links | Admin: Generate certificates and share links | |
| Approve or reject membership requests | Admin: Approve or reject membership requests | ||
| Edit club branding and settings | Admin: Edit club branding and settings |
Section 2
Getting started
Register, wait for approval, add your first bird.
Five steps, and only one of them depends on somebody else.
Create an account
Email and a password, or Continue with Google.
You are pending
You can sign in and look around, but nothing can be saved yet.
An admin approves you
A club admin reviews the request from the Members page.
Your loft is created
Automatically, in the same moment as the approval. Name it and add your details in Settings.
Add your first bird
A ring number is genuinely all you need to start. Everything else can follow later.
Section 3
Your loft
Your birds are yours. Nothing crosses between lofts.
Everything you create belongs to your loft and is resolved from your login, never from something you pick on screen. You will not find a loft chooser anywhere in the app, because there is nothing to choose.
- Another member cannot see, search or open your birds — a record from another loft reads as simply not existing.
- Ring numbers are unique inside your loft, not across the club. Two members may legitimately hold the same number.
- A parent must live in your own loft. That is why a bird off somebody else's paper certificate is typed in as an ancestor rather than borrowed.
- The one thing you deliberately hand out is a share link, and you can revoke it whenever you like.
Section 4
Adding a pigeon — every field explained
The data dictionary, and which fields feed a score.
A pigeon record has twenty fields and exactly one you cannot leave out. The table below is the whole record: what each field is for, and — the column most people come here for — whether it changes a number somewhere else in the app.
The ring number is the bird's passport. It is what a race sheet is matched against, what a buyer checks a certificate by, and what the QR page proves.
One field deserves its own paragraph. To build a four-generation tree you have to type in fourteen birds you have never owned. If those landed in your pigeon list, a loft of forty real birds would read as three hundred records. So a bird you keep is a loft bird and a bird that exists only in a tree is an ancestor — same rules, same tree, simply kept out of your list and your counts. You can promote one to the other at any time, in one click.
Section 5
Linking parents & the tree
Sire, dam, and how the tree builds itself.
You never draw a tree. You tell each bird who its father and mother are, and the tree is what those links look like when they are read upward.
- The sire must be a cock and the dam must be a hen. Getting them the wrong way round is refused, not quietly corrected.
- A bird whose sex is still U cannot be a parent, and does not appear in either picker. Set its sex first.
- A parent has to be in your own loft. If the bird is not there yet, add it from inside the picker as an ancestor.
- A pigeon cannot be its own ancestor. The picker hides the bird's own descendants, and the server walks the chain again before saving.
Deleting a bird that is somebody's parent is refused, because it would put a hole in its children's trees. Change its status to deceased or sold instead — the record stays, the tree stays, and the bird leaves your active list.
Section 6
The AI pedigree scanner
Photograph a paper card; check everything; then import.
Photograph a paper pedigree certificate and the platform reads the text off it, works out which bird is which, and hands you a table to check. It is a typing shortcut, not an oracle.
The five scan statuses
| Status | What it means |
|---|---|
| Uploadeduploaded | The photo reached the server. Nothing has been read yet. |
| Reading textocr | OCR is pulling the text off the card. |
| Understanding the cardparsing | The AI is turning that text into birds, parents and ring numbers. |
| Ready for reviewready | Open the scan and check every field before importing. |
| Failedfailed | Read the reason on the scan, then try another photo or type the bird in by hand. A failed scan is not an error page — it is a normal answer. |
Ring numbers already in your loft are linked to rather than duplicated, so scanning a second card that shares a grandfather does not give you two of him.
Section 7
Bulk import from a spreadsheet
One CSV, two passes, and a report of what failed.
If your loft already lives in a spreadsheet, export it as CSV and upload it. Only one column is required — up to five thousand rows in one file.
CSV columns
| Column | What it means |
|---|---|
| RequiredringNumber | The bird's ring. A row without one is skipped and reported. |
| Optionalname | The bird's call name. |
| Optionalsex | M, F or U. Anything else — including blank — becomes U. |
| OptionalbirthYear | A whole year, e.g. 2020. |
| Optionalbreed | Free text. |
| Optionalcolor | Free text. |
| OptionalsireRingNumber | The father's ring. Linked in the second pass, so it may appear anywhere in the file. |
| OptionaldamRingNumber | The mother's ring. Same two-pass rule. |
The file is read twice. The first pass creates every bird with no parents attached; the second goes back and links the sires and dams by ring number. That is why a chick may sit above its own father in the file and still come out linked — order does not matter.
Section 8
Race results
What to record, and why totalBirds is the field that matters.
A result is one bird in one race. You can add them one at a time from the bird's own page, or upload a club race sheet and let every row find its bird by ring number.
A race sheet is matched by ring number against your loft birds only. A bird you typed in as a pedigree-only ancestor never flew for you, so it is not considered — but if the platform spots that the ring you uploaded belongs to one of your ancestors, it says so and offers to move that bird into your loft on the spot.
Section 9 · How it is calculated
Race score & Producer ranking
What a result is worth, and which birds throw the best children.
Sometimes called the "best pigeon" ranking — here's what the platform actually measures.
A bird scores higher when it beats more birds. Finishing 5th out of 2,000 is worth far more than 5th out of 50, and a national is worth more than a club race against the same field. Those two ideas are the whole model. Everything below is them written out carefully enough that you can check the platform's arithmetic against your own.
What one race result is worth
score = max(0, 1 − position / totalBirds) × categoryWeightThe constants
- club ×1
- regional ×1.5
- national ×2.5
- international ×3
- position
- your bird's finishing place
- totalBirds
- how many birds were in that race
- categoryWeight
- the category weight below
Beating 1,995 birds is a harder thing to do than beating 45, and the score says so.
Source: server/src/modules/performance/scoring.service.ts:72-77
Two fifth places that are not worth the same
Both birds finished 5th. One of them beat 1,995 birds in a national; the other beat 45 in a club race.
Step 1
Bird A — 5th of 2,000, national
1 − 5/2000 = 0.9975Result:0.9975 × 2.5 = 2.49375Step 2
Bird B — 5th of 50, club
1 − 5/50 = 0.9Result:0.9 × 1.0 = 0.9
Bird A's single result is worth almost three times Bird B's — the field size did most of that, and the national weight did the rest.
One bird's score
birdScore = mean( score(r) ) for every SCORABLE result r
races = every result, scorable or not
unscored = results with no usable totalBirdsThe constants
- MIN_RACES_FOR_CONFIDENCE 3
- TOP_FRACTION 0.1
- mean
- the MEAN of its scorable results — never the sum
- scorable
- a result that has both a position and a totalBirds
A sum would make the oldest bird in the loft win every time — it measures how long a bird has raced, not how well.
Source: server/src/modules/performance/scoring.service.ts:115-143
A producer's score
producerScore = mean( birdScore(c) ) for every RACED child c
ranked = racedChildren ≥ 2
confident = total scored races ≥ 3The constants
- MIN_RACED_OFFSPRING 2
- MIN_RACES_FOR_CONFIDENCE 3
- ELITE_SCORE 1.4
- STRONG_SCORE 0.8
- RACED child
- only the children that have actually raced
- ranked
- needs 2 raced children before it is ranked at all
- confident
- needs 3 scored races beneath the whole set
A producer is judged on what its children do in a basket, not on what it did itself.
Source: server/src/modules/performance/scoring.service.ts:186-210
A stock cock with three children
Two of its children have raced. The third is a young bird still on the ground.
Step 1
Child 1 — 10th, 20th and 30th of 100 club races
(0.90 + 0.80 + 0.70) / 3Result:0.80Step 2
Child 2 — the same three results
(0.90 + 0.80 + 0.70) / 3Result:0.80Step 3
Child 3 — has never raced
not averaged in — counted as unprovenResult:—Step 4
The producer score
(0.80 + 0.80) / 2 — two raced children, not threeResult:0.80 · ranked · strong
Had the unraced chick been averaged in as a zero, this bird would have scored 0.53 and dropped a whole tier for the crime of having bred this year.
The five tiers
| Tier | What it says about the bird |
|---|---|
| Eliteelite | Score 1.4 or higher, across enough races to be sure. |
| Strongstrong | Score 0.8 or higher. Solid, repeated results. |
| Averageaverage | Raced enough to judge; middle of the field. |
| Provisionalprovisional | Fewer than 3 scored races. The score could move a long way — read it as a hint, not a verdict. |
| Unracedunproven | Has never raced. There is nothing to score yet. |
Try it yourself
Race score calculator
Move the numbers and watch the real formula run. These are the same constants the server uses.
What changed: Nothing has moved yet.
Section 10 · How it is calculated
Pair matching
Which two birds to put together, before any egg exists.
Most pairings you are thinking about have never raced a chick, so there is nothing to score them on yet. The match answers the question you actually have in front of the stock loft: given what these two birds have done themselves, should they go together at all?
Three things are weighed, and they are the three a fancier weighs anyway: do both birds win from the same distance, is the eye colour different, and are the parents' own results any good. Form carries the most weight because it is the only one backed by a whole race record; the eye carries the least because it is tradition rather than measurement, and the platform treats it as exactly that.
The pair match
match = Σ( criterion × weight ) ÷ Σ( weight )
…over the criteria that ARE recorded
distance = agreement × strength weight 0.35
form = normalise(mean result) weight 0.45
eye = different ? 1 : 0 weight 0.2The constants
- distance 0.35
- form 0.45
- eye 0.2
- FULL_MARK_SCORE 1.4
- STRONG_MATCH 0.72
- FAIR_MATCH 0.45
- distance
- do both birds win from the same distance?
- form
- how good are the two parents' own results?
- eye
- is the eye colour different? (contrast is the old rule of thumb)
- Σ( weight )
- a criterion with nothing recorded is DROPPED, not scored zero
This answers a different question from the producer score: not what a pairing has thrown, but whether the two birds should go together at all.
Source: server/src/modules/performance/pair-match.service.ts:306-347
Distance bands
| Band | What it means |
|---|---|
| Sprintsprint | Up to 200 km |
| Middlemiddle | 201 to 400 km |
| Longlong | 401 to 600 km |
| Extremeextreme | Beyond 600 km |
A pairing with no eye colour on file
Both birds win at sprint distances and both have solid club records. Neither has an eyeColor recorded.
Step 1
Distance — both best at sprint
agreement 1.0 × strength 0.70Result:0.70 × weight 0.35Step 2
Form — the parents' own results
mean result score 0.98, normalised against 1.4Result:0.70 × weight 0.45Step 3
Eye — nothing recorded
weight 0.20 is DROPPED, not scored 0Result:excludedStep 4
The denominator changes
(0.70×0.35 + 0.70×0.45) / (0.35 + 0.45)Result:0.70 — out of 0.80, not out of 1.00
The missing eye colour costs the pair its confident flag, never its score. A pairing whose birds have no eye on file must not rank below one whose eyes genuinely clash.
Pair match tiers
| Tier | What it says about the bird |
|---|---|
| Strongstrong | 0.72 or higher, on a record complete enough to trust. |
| Fairfair | 0.45 or higher. Worth considering. |
| Weakweak | Below 0.45, on a complete record. The criteria genuinely disagree. |
| Provisionalprovisional | Something is missing — usually an eye colour or too few races at a distance. |
| Not assessedunknown | Nothing is recorded about either bird. This is not a low score; it is no score. |
Try it yourself
Pair match calculator
Clear an eye colour and watch the denominator change — that is the renormalisation rule doing its work.
What changed: Nothing has moved yet.
Section 11 · How it is calculated
The inspection report
Twelve rows in the hand; ten are marked out of 10.
This is the assessment you make with the bird in your hand, set out the way a handling card is: General (first impression, back, muscles, balance), Wings, Eyes and Ventbones. Each of those ten rows gets a mark out of 10 — quarter marks like 9.25 are fine — and the ten marks add up to a total out of 100. A half-finished card is scaled from the rows you marked, so it is never punished for being half-finished.
The twelve rows
| Trait | Section · how it is marked |
|---|---|
| First impressionfirst_impression | General · marked 1 to 10 |
| Backback | General · marked 1 to 10 |
| Musclesmuscles | General · marked 1 to 10 |
| Balancebalance | General · marked 1 to 10 |
| Sizesize | General · small, medium or big — recorded, not scored |
| Lengthlength | General · short, medium or long — recorded, not scored |
| Flexibilitywing_flexibility | Wings · marked 1 to 10 |
| Quality of feathersfeather_quality | Wings · marked 1 to 10 |
| Softnessfeather_softness | Wings · marked 1 to 10 |
| Breeding valueeye_breeding_value | Eyes · marked 1 to 10 |
| Strengthventbone_strength | Ventbones · marked 1 to 10 |
| Closed ventbonesventbone_closure | Ventbones · marked 1 to 10 |
The inspection score
total = Σ( mark ) ÷ ( answered × 10 ) × 100 rounded to 2 places
…over MARKED rows only — a full card is just its ten marks added upThe constants
- MIN_SCORED_TRAITS 5
- scoring traits 10
- excellent ≥ 90
- very_good ≥ 85
- good ≥ 80
- fair ≥ 70
- poor ≥ 0
- answered
- only the rows you actually marked
- 10
- the top of the scale — every row is out of 10
- gate
- withheld entirely below 5 marked rows
A full card’s total is just its ten marks added up. A partial card is scaled from the rows you marked, not punished for the blanks — the blanks are reported as coverage instead.
Source: server/src/modules/pigeon/inspection.service.ts
A full card of ten marks
First impression 9.5, back 9.25, muscles 9.5, balance 9.25; wings 9.5, 9.5 and 9.5; eyes 9.5; ventbones 9.5 and 9.25. Size and length were noted as medium.
Step 1
The marks added up
9.5 + 9.25 + 9.5 + 9.25 + 9.5 + 9.5 + 9.5 + 9.5 + 9.5 + 9.25Result:94.25Step 2
Out of — marked rows only
10 rows × 10Result:100Step 3
The total
94.25 ÷ 100 × 100Result:94.25Step 4
The band
94.25 ≥ 90Result:Excellent
Size and length never entered the sum. Had only five rows been marked, the total would be scaled from those five — and coverage would say 5 of 10.
Grade bands
| Grade | Score from |
|---|---|
| Excellentexcellent | 90 and above |
| Very goodvery_good | 85 to 89.75 |
| Goodgood | 80 to 84.75 |
| Fairfair | 70 to 79.75 |
| Poorpoor | Below 70 |
Try it yourself
Inspection total calculator
Move the marks as you would with the bird in your hand, and choose how many rows were marked — an unmarked row stays out of the sum entirely.
What changed: Nothing has moved yet.
Section 12
The pedigree card — what it prints, and what you change
Every box fills itself. This is what from, and which parts are yours.
You never lay the card out. Every box on it fills itself from what you have already recorded — the ring numbers you typed, the parents you linked, the results you entered. This section is the sheet, region by region: what arrives there on its own, and what is yours to change.
What fills the card on its own
| Part of the card | What it prints on its own |
|---|---|
| Letterheadheader | Reads “Pedigree for pigeon”, followed by the subject's ring number. The card names the document, not the club — every card your club prints carries the same club, but only one carries this bird. The club logo is printed faintly across the whole sheet behind everything else, as a watermark. |
| Column headingscolumnHeads | Subject · Parents · Grandparents · Great-Grandparents, ruled off along the top of the bracket, one heading per column that prints. A tree trimmed to three generations prints three headings. |
| Loft panelloftPanel | The head of the first column: the fancier's photograph, the loft name, and the honours lines from the block you type in loft settings. Nothing recorded means nothing drawn — no frame, no placeholder, and the boxes below simply get the room. |
| Subject boxsubjectBox | The bird the card is about, with its own photograph, under the loft panel. With no photograph the frame is not drawn at all and the box is shorter — an empty rectangle stamped “no photo” tells a reader about a gap in the software, not about the bird. |
| Ancestor boxesancestorBoxes | Two parents, four grandparents and eight great-grandparents, each filled from that bird's own record. A bird that appears twice in an inbred tree fills two boxes and is worded in each of them separately. What each generation carries is the table further down. |
| Race linesraceLines | Every box prints that bird's best results, best first, in the card's own register — 3 CHOKORIYA 152KM 211P, with the distance dropped when a race has none. Two lines per box by default. A bird that has never raced prints nothing at all, never a zero. |
| Sibling resultssiblings | On the subject's box only, and only when there are any: up to four headed blocks — FULL BROTHER/SISTER, HALF BROTHER, HALF SISTER — each carrying the relative's ring number and its results. Full siblings come first. A relative with no results is left out rather than printed as a heading with nothing under it. |
| Footerfooter | Three regions along the foot: the breeder block (loft name, club membership, location), the signature and the name under it, and the QR with the verification code printed beneath it and the line naming the club that authorised the card. The signature is the OWNER's — yours, from loft settings — because the bird and the claim are the breeder's. |
| Bottom barbottomBar | Certificate number and issue date at the left, the platform's name and the domain a scan resolves against at the right. A card that has never been generated has no number, so the bar prints a dash rather than inventing one. |
A single box reads top to bottom in the order a fancier looks things up. The ring number sits in a ruled header with ♂, ♀ or ? at its right edge. Under it, in blue, the strain · colour · year line; then the bird's name; then its bloodline callout; then its note; then its results. A field you never filled in simply does not print and the box gets shorter — nothing is padded out, and no box announces what it does not know.
What each box carries by default
| Box | What it carries, and how much room |
|---|---|
| Subject — the bird itselfsubject | First column, under the loft panel. Its photograph, then the ring number with ♂, ♀ or ? beside it, the strain · colour · year line in blue, the name, the bloodline callout, the note, its own best results — and, on this box alone, up to four blocks of its full and half siblings' results under their own headings. Room for about thirty printed lines with a photograph and about fifty without, so on the subject everything you have recorded normally fits. |
| Sire and damparents | The same fields as the subject, minus the two it does not get: no photograph, and no sibling blocks — so ring number and sex, strain · colour · year, name, callout, note, and that bird's own best results. These two boxes are the only ones labelled: a small SIRE or DAM tab straddles the top rule, chosen by POSITION, so it reads correctly even for a parent whose sex was never recorded. Room for about twenty printed lines each. |
| Grandparentsgrandparents | The same fields again, set smaller. No tab — from here outward the bracket itself says which bird is which, and a card that labels all fourteen boxes is labelling nothing. Room for about ten printed lines. |
| Great-grandparentsgreatGrandparents | The outermost column, and the one where the room runs out: two printed lines, however much you have recorded. The identity always prints — ring number, sex, the strain line and the name — and the two lines below it are whatever fits, your note first. A long note on a great-grandparent is what costs that box its race line. |
There are two ways to change what the card says, and the difference between them matters more than anything else on this page. Editing the RECORD — tapping a box on the Pedigree tab — changes the bird itself: on its own page, in every list, and on every card you print of it from then on. Making a DRAFT changes only that one card: the wording, what is hidden, the colours. A draft never writes a single field back to a pigeon, and that is the whole reason it exists — preparing a bird for sale should not mean altering your own records.
What you can change, and where
| What you change | Where — and what it touches |
|---|---|
| The bird's own detailsrecord | Tap any box on the Pedigree tab — name, sex, year, colour, strain and the note. This is the RECORD: the change shows on the bird's page, in every list, and on every card you print from then on. Tapping an empty box adds that ancestor instead of editing one. |
| Depthgenerations | Three or four generations — on the Pedigree tab, on the certificate screen, and in a draft. The card is a four-column instrument, so a deeper request is accepted and still prints four, and what a finished certificate records is the depth that printed, not the one that was asked for. |
| Picturesphotos | Uploaded on their own screens, never inside a draft: the bird's photograph on its page, the fancier's portrait and your signature in loft settings, the club logo in admin settings. They are live — replacing one changes every card you print afterwards. |
| Reworded boxesoverrides | In a draft: name, year, colour and strain, plus two labels that exist only on paper — a loft label and a breeder label. An ANCESTOR's ring number can be reworded too; the subject's cannot. Boxes are addressed by their position in the tree, so the same bird filling two boxes is worded separately in each. |
| Bloodline calloutcallout | In a draft: the one-line claim under the name — G.GRANDSON WILLY, SON LUDU CLASSENS. It prints in the club's accent colour, and it is its own line rather than the first sentence of the note. |
| Race lines and headingsraceBlocks | In a draft. The lines arrive from the recorded results and are free text from that moment on: reword one, reorder it, hide it, delete the lot, pick one out in the accent colour, or pull a half brother's or a son's results in from the relatives picker and give that block your own heading. Rewording a printed line never touches the race result underneath it. |
| Race lines per boxhighlights | In a draft: zero to ten, two by default. The snapshot always captures ten lines a box, so raising the number later never runs out of results to print. |
| Hidden fieldshiddenFields | In a draft. A hidden field prints blank rather than pulling the rest of the box up behind it. Sex and the photograph can be hidden but not reworded — they are facts of the record, not wording. |
| Hidden boxeshiddenNodes | In a draft. Hiding a box takes its whole branch with it — that bird's parents and grandparents stop printing too. Unhiding brings back every edit you had made inside it, exactly as they were. The subject's own box cannot be hidden. |
| Box coloursboxStyles | In a draft: any box on the tree, and the three full-width bands — letterhead, footer, bottom bar — take a colour from the palette or a hex value of your own. Resetting one returns it to white. The card is white paper by default, with its structure carried by hairlines rather than by filled panels, because that is what survives a photocopier. |
| Card header and footerfurniture | In a draft: the loft name on the panel and its honours lines, and the footer's loft name, club membership, address and phone. Either can be hidden outright, and a hidden footer prints nothing at all rather than falling back to the live block. Both are a COPY taken when the draft was made, so a club rebrand or a loft rename never rewrites a card you have already proofread. |
Section 13
Certificates, QR & sharing
Edit the card, print it, and let a buyer verify it.
A certificate is a four-generation pedigree on one A4 sheet, with your loft's details, your signature and a QR code. It is generated as a snapshot: the PDF and the picture are captured at the moment you make them and stored, so redesigning the sheet later does not alter a card somebody is already holding.
Edit first
Make a draft if you want to reword a box, hide a branch or colour a panel. The bird's own record is never touched by any of it.
Generate
You get a PDF and a picture from one render, plus a QR code pointing at a public page.
Hand it over
Print it, or send the picture. Both show exactly what you proofread.
The buyer verifies
Scanning the QR opens the same card on the web, with no login. What they see matches the paper in their hand.
The QR proves one thing precisely: that this ring number is recorded in this club's register with this pedigree behind it. The subject's ring number and the verify code cannot be reworded or hidden on any card — a certificate whose ring number could be faked would be worthless.
Section 14
Health records
What you gave, when, and to which bird.
Health records hang off a bird, so a bird's page shows its own history. There is also a loft-wide list, which is the one you want in the week before a race when you are checking what the whole team has had.
Health record types
| Status | What it means |
|---|---|
| Vaccinationvaccination | Paramyxo, paratyphoid and the rest of the programme. |
| Treatmenttreatment | A course given for something you found. |
| Check-upcheckup | A routine look at the bird, or a vet visit. |
Section 15
Breeding pairs & offspring
A pair, its eggs, and registering what hatched.
A pair records which cock went with which hen, in which season and round. Eggs are tracked underneath it, and when one hatches you register the chick — which creates a real pigeon with both parents already linked.
Breeding pair statuses
| Status | What it means |
|---|---|
| Pairedpaired | The two birds are together. No eggs yet. |
| Eggs laideggs_laid | Eggs are recorded against the pair. |
| Hatchedhatched | At least one egg hatched. Hatchlings can now be registered. |
| Completedcompleted | The round is finished and closed. |
| Failedfailed | Nothing came of the round. |
Each hatched egg gives exactly one offspring slot, so a pair tracking no eggs has no slots at all. If the register button is missing, the pair is not at hatched yet or every hatched egg already has its chick.
Section 16
For club admins
Approvals, branding, and what approval actually does.
An admin is a member with two extra jobs: deciding who gets in, and setting what the club's name and badge look like on every certificate the club prints.
- Approve, reject or suspend membership requests from the Members page. A rejection carries a reason the member can read.
- Set the club's name, location, badge and the lines that print under it on a certificate.
- An admin is a member too, with their own loft and their own birds. The two roles do not get in each other's way.
- An admin cannot see inside another member's loft. The role grants club-level settings, not access to anyone's records.
Section 17
When something goes wrong
Every error the platform can show, in plain words.
Every message the platform can show you is listed here with what it means and what to do about it. The code is the part that never changes between versions, so it is the thing worth searching for.
| Code | HTTP | What it means | What to do |
|---|---|---|---|
UNAUTHORIZED | 401 | You are not signed in. | Log in again. |
TOKEN_EXPIRED | 401 | Your session went stale while the tab was open. | Nothing — the app renews it and retries by itself. If the page is stuck, reload it. |
REFRESH_TOKEN_INVALID | 401 | The session could not be renewed. | Log in again. |
INVALID_CREDENTIALS | 401 | That email and password do not go together. | Check both. The app deliberately does not say which one is wrong. |
EMAIL_EXISTS | 409 | An account already uses that email. | Log in instead, or use Forgot password. |
FORBIDDEN | 403 | Your role cannot do that, or the record belongs to another loft. | If you believe it is yours, contact the club admin. |
MEMBERSHIP_PENDING | 403 | Your account exists but an admin has not approved it yet. | Wait for the approval email. Until then you can read, not write. |
MEMBERSHIP_REJECTED | 403 | Your membership request was turned down. | The reason is on your membership page, and you can request again from there. |
MEMBERSHIP_SUSPENDED | 403 | Your membership has been suspended. | Contact the club admin. |
NOT_FOUND | 404 | It does not exist — or it belongs to another member. | Check the link. The platform never reveals another loft's records, so both cases look the same. |
VALIDATION_ERROR | 400 | One of the fields you sent is not acceptable. | The message names the field. Common ones: a future date, a birth year outside 1800 to now, or a position greater than totalBirds. |
RING_NUMBER_EXISTS | 409 | A bird in your loft already has that ring number. | Open the existing bird instead of adding a second one. Uniqueness is per loft — another club may hold the same number. |
SELF_ANCESTOR | 400 | The bird you picked as a parent is already a descendant of this one. | A pigeon cannot be its own ancestor. Check which way round the two birds go. |
SEX_MISMATCH | 400 | You put a hen in the father slot, or a cock in the mother slot. | The sire must be M and the dam must be F. |
SEX_UNKNOWN_FOR_PARENT | 400 | The bird you picked still has sex U. | Open that bird, set its sex, then link it. |
PIGEON_HAS_DESCENDANTS | 409 | This bird is a parent, so deleting it would break its children's trees. | Unlink its children first, or mark the bird deceased or sold instead of deleting it. |
INVALID_SHARE_TOKEN | 404 | That public link or printed QR was revoked. | Ask the owner for a new link. Old printed cards stop resolving once sharing is turned off. |
FILE_TOO_LARGE | 413 | The image is over the limit. | 5 MB for most pictures, 2 MB for the eye close-up. |
UNSUPPORTED_FILE_TYPE | 415 | That file is not a JPG, PNG or WebP. | Export it as one of those three. The check reads the file itself, so renaming it will not help. |
SCAN_NOT_READY | 409 | You tried to import a scan before it finished parsing. | Wait for the status to reach ready. The page polls by itself. |
SCAN_ALREADY_IMPORTED | 409 | This scan's birds are already in your loft. | Open the subject pigeon instead of importing a second time. |
EGG_ALREADY_REGISTERED | 409 | A chick was already registered from that egg. | Open the existing chick. Each hatched egg gives exactly one offspring slot. |
PAIR_NOT_HATCHED | 409 | The pair is not at hatched or completed yet. | Mark an egg hatched first. The action is hidden for every other status. |
OFFSPRING_LIMIT | 409 | Every hatched egg on this pair already has a chick recorded against it. | Mark another egg hatched. Retrying cannot help. |
DRAFT_NOT_FOUND | 404 | That certificate draft does not exist, or belongs to another loft. | Go back to the drafts list and open one from there. |
CERT_FIELD_LOCKED | 400 | You tried to hide or reword something a certificate is not allowed to change. | The subject's ring number and the verify code are locked on purpose — a card whose ring number could be faked is worthless. |
IMPORT_PARSE_ERROR | 422 | The file could not be read as a CSV. | Check the header row, the separators, and that the file is under 5,000 rows. |
RATE_LIMITED | 429 | Too many requests in a short time. | Wait a little and try again. Certificates are capped at 30 an hour and scan uploads at 10. |
DUPLICATE_RACE_RESULT | 409 | This bird already has a result for that race and date. | Edit the existing result. Adding one by hand is blocked; re-uploading a race sheet overwrites instead, because a corrected sheet is a normal thing to send twice. |
INTERNAL_ERROR | 500 | Something broke on the server. | Try again. If it keeps happening, tell the club admin what you were doing. |
Section 18
Glossary
The words this app uses, in both languages.
Some of these words stay English inside a Bangla sentence, because that is how fanciers actually say them at the clubhouse. Both columns are here so either habit reads.
- Ring numberরিং নম্বরEnglish / Bangla
- The bird's identifier, stamped on its ring.
- LoftলফটEnglish / Bangla
- Your whole collection of birds and records.
- PedigreeবংশতালিকাEnglish / Bangla
- The family tree, four generations on a printed card.
- Sireবাবা পায়রাEnglish / Bangla
- The father. Must be a cock.
- Damমা পায়রাEnglish / Bangla
- The mother. Must be a hen.
- CockনরEnglish / Bangla
- A male bird — sex M.
- HenমাদিEnglish / Bangla
- A female bird — sex F.
- Strainরক্তধারাEnglish / Bangla
- The bloodline a bird comes from.
- Eye signচোখের চিহ্নEnglish / Bangla
- The colour and pattern of the eye, judged by hand.
- VelocityগতিEnglish / Bangla
- Metres per minute — how fast the bird came home.
- Basketঝুড়িEnglish / Bangla
- To send a bird to a race — "basketed" means entered.
- Clutchএক দফার ডিমEnglish / Bangla
- The eggs a pair lays in one round.
- Roundরাউন্ডEnglish / Bangla
- Which clutch of the season this is — first, second, third.
- Ancestor recordশুধু গাছের পাখিEnglish / Bangla
- A bird that exists only in a pedigree, not in your loft.
- Loft birdনিজের পাখিEnglish / Bangla
- A bird you physically keep. This is what "N pigeons" counts.
- Producerবাচ্চাদাতা পাখিEnglish / Bangla
- A bird judged by what its children do, not by what it did.
- Share linkশেয়ার লিংকEnglish / Bangla
- A public address for one bird's pedigree. Revocable.
- CertificateসনদEnglish / Bangla
- The printable A4 pedigree card with a QR code.
Section 19
Common questions
Ten things members ask in the first week.
I registered but I cannot add a bird.
Your account is still pending. A club admin has to approve it, and your loft is created at that moment. Until then you can sign in and read, but every save button is hidden.
Do breeders have a star rating?
No. This version has no member rating of any kind — no stars, no clubScore, no raceScore for a person. What replaced it is the Producer leaderboard, which ranks BIRDS by what their children do in a basket. If you read about a breeder rating in an older API document, that module was removed.
Does it matter how I punctuate a ring number?
Not for matching a race sheet — NL 20-1739393, NL20.1739393 and nl201739393 all match the same bird. It does matter for your own list, because the bird is stored exactly as you typed it, so pick one style and stay with it.
Why does my best bird have no score?
Three possibilities. It has never raced, so there is nothing to score. Or it has fewer than two raced children, so it is not ranked as a producer. Or its results are missing totalBirds, which leaves them out of every average. The producer page says which of the three it is.
Will this year's young birds drag my stock cock's score down?
No. A producer's score is the mean over its raced children only. Unraced chicks are counted and shown as unproven, but they never enter the average — you are not penalised for having bred this year.
Is 12th place a top 10 result?
It depends entirely on the field. Top 10% means the top ten per cent, not the top ten places: 12th of 200 counts, 12th of 60 does not.
The bird I want as a father is not in the list.
Almost always its sex is still U — a bird with unknown sex can never be a parent. Open it, set the sex, and it appears. The other possibilities are that it is one of this bird's own descendants, which would make a loop, or that it is not in your loft yet.
Can I print six generations?
No, and the app deliberately does not offer it. The card is a four-column instrument: four generations is what an A4 sheet holds at a size a person can read at arm's length. Offering a depth the card cannot print would be a promise the paper could not keep.
The scanner read a ring number wrong.
Correct it in the review table before you press Import — nothing is written to your loft until then. Rows the parser was unsure about are flagged amber, but check the confident ones too; the flag is a hint, not a guarantee.
I sold a bird and want the old link to stop working.
Turn sharing off on that pigeon. The public page and any QR already printed stop resolving immediately, and anyone opening the old link is told the link was revoked rather than shown the bird.