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.

Who can do what
CapabilityGuestMemberAdmin
Read this guideGuest: Read this guideMember: Read this guideAdmin: Read this guide
Scan a QR code and verify a certificateGuest: Scan a QR code and verify a certificateMember: Scan a QR code and verify a certificateAdmin: Scan a QR code and verify a certificate
Open a shared pedigree linkGuest: Open a shared pedigree linkMember: Open a shared pedigree linkAdmin: Open a shared pedigree link
Create an accountGuest: Create an account
Add and edit their own pigeonsMember: Add and edit their own pigeonsAdmin: Add and edit their own pigeons
Record race results for their own birdsMember: Record race results for their own birdsAdmin: Record race results for their own birds
See their own scores and rankingsMember: See their own scores and rankingsAdmin: See their own scores and rankings
Generate certificates and share linksMember: Generate certificates and share linksAdmin: Generate certificates and share links
Approve or reject membership requestsAdmin: Approve or reject membership requests
Edit club branding and settingsAdmin: Edit club branding and settings
Every approved member has exactly one loft, and it is created for you the moment an admin approves your account. There is nothing to set up and nothing to choose between.

Section 2

Getting started

Register, wait for approval, add your first bird.

Five steps, and only one of them depends on somebody else.

  1. Create an account

    Email and a password, or Continue with Google.

  2. You are pending

    You can sign in and look around, but nothing can be saved yet.

  3. An admin approves you

    A club admin reviews the request from the Members page.

  4. Your loft is created

    Automatically, in the same moment as the approval. Name it and add your details in Settings.

  5. Add your first bird

    A ring number is genuinely all you need to start. Everything else can follow later.

While you are pending, every button that would save something is hidden rather than disabled. That is deliberate — an offer you cannot accept is worse than no offer.

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.
Settings holds three pictures: the loft itself, the fancier who keeps it, and a scan of your signature. The fancier's photo and the signature are what print on a certificate — the picture of the shed does not, because a photograph of a building says nothing about who bred the bird.

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.

Only the ring number is truly required; sex fills itself in as U. The add form folds the rarely-used fields away for that reason — it is a two-minute job, not a twenty-minute one.

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.

When a race sheet is matched, everything that is not a letter or a digit is stripped and the rest is upper-cased — so NL 20-1739393, NL20.1739393 and nl201739393 are all read as one ring. Clubs punctuate the same bird differently on two sheets, and that is typography, not data. Your bird is stored exactly as you typed it; the normalisation happens only at matching time.

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.
If a bird you expected to find is missing from the father or mother list, its sex is almost certainly still U. That is the single most common reason a parent cannot be picked.

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.

The tree prints four generations: the bird, its parents, its grandparents and its great-grandparents. That is what an A4 sheet holds at a size a person reads at arm's length, so the app never offers five or six — a depth the card cannot print would be a promise it cannot keep.

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.

Nothing is written to your loft until you press Import. Everything before that is a draft you can edit, correct or throw away.

The five scan statuses

StatusWhat it means
UploadeduploadedThe photo reached the server. Nothing has been read yet.
Reading textocrOCR is pulling the text off the card.
Understanding the cardparsingThe AI is turning that text into birds, parents and ring numbers.
Ready for reviewreadyOpen the scan and check every field before importing.
FailedfailedRead 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.
Four steps on screen, five statuses underneath — failed is a status any of the first three can enter.
A bird the parser was less than 80% sure about is flagged amber. That flag is a hint about where to look hardest, nothing more — the platform will import an amber bird exactly as readily as a confident one, because your review is what is trusted, not the machine's.

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

ColumnWhat it means
RequiredringNumberThe bird's ring. A row without one is skipped and reported.
OptionalnameThe bird's call name.
OptionalsexM, F or U. Anything else — including blank — becomes U.
OptionalbirthYearA whole year, e.g. 2020.
OptionalbreedFree text.
OptionalcolorFree text.
OptionalsireRingNumberThe father's ring. Linked in the second pass, so it may appear anywhere in the file.
OptionaldamRingNumberThe mother's ring. Same two-pass rule.
Only ringNumber is required. Everything else is optional and may be left out of the file entirely.

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.

A bad row never kills the batch. Each failure is reported with its row number and its reason, and everything else still imports. A row that was created but whose parent could not be found is listed too — that bird is in your loft, just unlinked, so you can fix the link by hand.

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.

If you record nothing else properly, record totalBirds. Position on its own is not a result: 5th of 2,000 and 5th of 50 are the same position and nothing like the same achievement. A result saved without a usable field size still shows in the bird's race list and still counts as a race, but it is left out of every score the platform calculates — it cannot say how good a placing was without knowing what it was against.

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.

Adding the same race and date twice by hand is blocked — that is a mistake worth catching. Re-uploading a corrected race sheet is not: the old row is overwritten and counted as updated, because sending a fixed sheet again is a normal thing to do.

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) × categoryWeight

The 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.

  1. Step 1

    Bird A — 5th of 2,000, national

    1 − 5/2000 = 0.9975Result:0.9975 × 2.5 = 2.49375
  2. Step 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 totalBirds

The 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 result with no usable totalBirds still counts as a race, still shows in the bird's list, and still counts toward wins and best position — but it is left out of the mean and out of the confidence test. Averaging in a zero would be a claim the record does not support. If a bird's score looks lower than you expected, check how many of its results are missing a field size.
Top 10% means the top ten PER CENT of the field, not the top ten places. 12th of 200 is inside it, because 200 × 0.1 is 20. 12th of 60 is not, because 60 × 0.1 is 6. This catches people out more often than any other rule on the page.

A producer's score

producerScore = mean( birdScore(c) ) for every RACED child c ranked = racedChildren ≥ 2 confident = total scored races ≥ 3

The 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 producer's score is the mean over its RACED children only. A young round still on the ground is counted and reported as unproven, but it never enters the average. Without this rule your best stock cock's score would collapse every time he bred, which is exactly backwards.

A stock cock with three children

Two of its children have raced. The third is a young bird still on the ground.

  1. Step 1

    Child 1 — 10th, 20th and 30th of 100 club races

    (0.90 + 0.80 + 0.70) / 3Result:0.80
  2. Step 2

    Child 2 — the same three results

    (0.90 + 0.80 + 0.70) / 3Result:0.80
  3. Step 3

    Child 3 — has never raced

    not averaged in — counted as unprovenResult:—
  4. 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

TierWhat it says about the bird
EliteeliteScore 1.4 or higher, across enough races to be sure.
StrongstrongScore 0.8 or higher. Solid, repeated results.
AverageaverageRaced enough to judge; middle of the field.
ProvisionalprovisionalFewer than 3 scored races. The score could move a long way — read it as a hint, not a verdict.
UnracedunprovenHas never raced. There is nothing to score yet.
The two gates run before any of these words is allowed to appear. An unranked bird is an unknown one, never a poor one.

Try it yourself

Race score calculator

Move the numbers and watch the real formula run. These are the same constants the server uses.

5
2,000
Race category
Fraction of the field beaten1 − 5/2000
0.9975
After the category weight× 2.5
2.4938
Inside the top 10%?≤ 200
✓
Final score
2.49

What changed: Nothing has moved yet.

Removed in this version
This version has no breeder star rating. There is no member rating, no clubScore and no raceScore for a person anywhere in the platform — a breeder's standing is shown by the Producer leaderboard instead, which ranks BIRDS by what their children do. If you read about a breeder rating in an older API document, this is what replaced it.

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.2

The 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

BandWhat it means
SprintsprintUp to 200 km
Middlemiddle201 to 400 km
Longlong401 to 600 km
ExtremeextremeBeyond 600 km
A club flying a different programme retunes the pairing model by changing these four numbers and nothing else.
This is the rule to understand before you read any pair score. A criterion with nothing recorded behind it is DROPPED and the remaining weights are shared out again — it is never counted as a zero. A pairing whose birds have no eye colour on file must not rank below one whose eyes genuinely clash, because the first is unknown and the second is known to be bad. The pair is reported as not confident instead, and a pairing with nothing recorded at all reads "Not assessed" and sorts last rather than worst.

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.

  1. Step 1

    Distance — both best at sprint

    agreement 1.0 × strength 0.70Result:0.70 × weight 0.35
  2. Step 2

    Form — the parents' own results

    mean result score 0.98, normalised against 1.4Result:0.70 × weight 0.45
  3. Step 3

    Eye — nothing recorded

    weight 0.20 is DROPPED, not scored 0Result:excluded
  4. Step 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

TierWhat it says about the bird
Strongstrong0.72 or higher, on a record complete enough to trust.
Fairfair0.45 or higher. Worth considering.
WeakweakBelow 0.45, on a complete record. The criteria genuinely disagree.
ProvisionalprovisionalSomething is missing — usually an eye colour or too few races at a distance.
Not assessedunknownNothing is recorded about either bird. This is not a low score; it is no score.
Not assessed is not the bottom of the scale — it is off the scale, and it sorts last for that reason.

Try it yourself

Pair match calculator

Clear an eye colour and watch the denominator change — that is the renormalisation rule doing its work.

150km
170km
3
5
Sire — eye colour
Dam — eye colour
Distance criterion× 0.35
0.686
Form criterion× 0.45
0.686
Eye criterion× 0.2
dropped — nothing recorded
Weights actually used
0.80
Final scoreprovisional
0.686

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.

Size and length are recorded but carry no mark, and that is on purpose rather than an oversight. A medium bird is not a better bird than a big one — those two rows describe the pigeon, they do not grade it.

The twelve rows

TraitSection · how it is marked
First impressionfirst_impressionGeneral · marked 1 to 10
BackbackGeneral · marked 1 to 10
MusclesmusclesGeneral · marked 1 to 10
BalancebalanceGeneral · marked 1 to 10
SizesizeGeneral · small, medium or big — recorded, not scored
LengthlengthGeneral · short, medium or long — recorded, not scored
Flexibilitywing_flexibilityWings · marked 1 to 10
Quality of feathersfeather_qualityWings · marked 1 to 10
Softnessfeather_softnessWings · marked 1 to 10
Breeding valueeye_breeding_valueEyes · marked 1 to 10
Strengthventbone_strengthVentbones · marked 1 to 10
Closed ventbonesventbone_closureVentbones · marked 1 to 10
Ten are marked out of 10 and add up to the total out of 100. Size and length are recorded and print on the report, but a medium bird is not a better one, so they carry no mark.

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 up

The 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

Mark fewer than five of the ten rows and no total or grade appears at all. The report still saves and still shows every mark you gave — only the rating is withheld, because a total derived from two marks gets read as one derived from ten. Coverage always tells you how many rows the total rests on.

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.

  1. 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.25
  2. Step 2

    Out of — marked rows only

    10 rows × 10Result:100
  3. Step 3

    The total

    94.25 ÷ 100 × 100Result:94.25
  4. Step 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

GradeScore from
Excellentexcellent90 and above
Very goodvery_good85 to 89.75
Goodgood80 to 84.75
Fairfair70 to 79.75
PoorpoorBelow 70
The band is read off the total out of 100, highest first — a total of exactly 90 is Excellent.

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.

10
9.5
9.25
9.5
9.25
9.5
9.5
9.5
9.5
9.5
9.25
Marks added up
94.25
Out of
100
10 of 10 graded rows marked
10/10
Final scoreExcellent
94.25

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 cardWhat it prints on its own
LetterheadheaderReads “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 headingscolumnHeadsSubject · 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 panelloftPanelThe 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 boxsubjectBoxThe 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 boxesancestorBoxesTwo 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 linesraceLinesEvery 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 resultssiblingsOn 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.
FooterfooterThree 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 barbottomBarCertificate 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.
Every region here is drawn from something you already keep — the bird, the loft, the club. Nothing on this list is typed into the card.

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

BoxWhat it carries, and how much room
Subject — the bird itselfsubjectFirst 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 damparentsThe 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.
GrandparentsgrandparentsThe 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-grandparentsgreatGrandparentsThe 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.
Every generation carries the same fields — the photograph and the sibling blocks are the only two things one box gets and another does not. What really changes outward is the room. A line prints whole or not at all, never cut mid-word; your own note is fitted before the recorded results; and a heading left with no line under it is dropped along with its block.
An ancestor you have not entered yet is an empty box. On a working screen — the Pedigree tab, the draft editor — it stays drawn, because it is what you tap to add that bird. On anything printed — the PDF, the picture, the page a QR opens — a generation holding no birds at all is dropped entirely, column and heading with it, and a gap inside a column that does hold birds prints as blank paper. A card handed to a buyer states what the loft knows; two columns of UNKNOWN read as a pedigree full of holes.

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 changeWhere — and what it touches
The bird's own detailsrecordTap 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.
DepthgenerationsThree 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.
PicturesphotosUploaded 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 boxesoverridesIn 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 calloutcalloutIn 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 headingsraceBlocksIn 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 boxhighlightsIn 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 fieldshiddenFieldsIn 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 boxeshiddenNodesIn 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 coloursboxStylesIn 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 footerfurnitureIn 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.
The first three rows change the bird and show up everywhere. Everything below them lives on a draft: it changes that one card and never the record behind it.
Two things can never be reworded or hidden, on any card, by anybody: the subject's ring number and the verification code. The subject's box cannot be hidden either. A certificate whose ring number could be faked proves nothing, and the QR page would contradict the paper in the buyer's hand. The controls are simply not offered, and the server refuses the same edit a second time with CERT_FIELD_LOCKED if anything else asks for it.
A draft is frozen the moment you make it. Correcting a bird's record afterwards does not flow into it — that is deliberate, so a card you proofread last week cannot change under you — and you bring a draft back up to date explicitly, with one button. Generating from a draft also publishes it: from then on the QR opens exactly the card you printed, hidden branches and all. Edit a published draft and the public page keeps showing the card you last generated until you generate again.

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.

  1. 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.

  2. Generate

    You get a PDF and a picture from one render, plus a QR code pointing at a public page.

  3. Hand it over

    Print it, or send the picture. Both show exactly what you proofread.

  4. 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.

Edit before you print, not after. A draft changes only how the card reads — it never edits the pigeon. That is the whole reason the draft layer exists: preparing a bird for sale should not mean altering your own records.

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.

Turning sharing off revokes the link immediately, and any QR already printed stops resolving. That is the intended behaviour — it is how you take a card back after a sale falls through.

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

StatusWhat it means
VaccinationvaccinationParamyxo, paratyphoid and the rest of the programme.
TreatmenttreatmentA course given for something you found.
Check-upcheckupA routine look at the bird, or a vet visit.
Three types, per bird, with the loft-wide list at Health.
Health records are the one part of the app you will thank yourself for keeping even when nothing is wrong. A clean vaccination history is what turns "I think we did it in March" into a date.

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

StatusWhat it means
PairedpairedThe two birds are together. No eggs yet.
Eggs laideggs_laidEggs are recorded against the pair.
HatchedhatchedAt least one egg hatched. Hatchlings can now be registered.
CompletedcompletedThe round is finished and closed.
FailedfailedNothing came of the round.
A hatchling can only be registered once the pair is hatched or completed.

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.

Registering a hatchling is one-way. The bird it creates is a real pigeon and the parent link is a pedigree fact, so there is no un-record button — the only way back is deleting the pigeon itself.

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.
Approving a member is not just a flag. It creates their loft in the same moment, which is why an approved account always has somewhere to put its first bird.

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.

CodeHTTPWhat it meansWhat to do
UNAUTHORIZED401You are not signed in.Log in again.
TOKEN_EXPIRED401Your 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_INVALID401The session could not be renewed.Log in again.
INVALID_CREDENTIALS401That email and password do not go together.Check both. The app deliberately does not say which one is wrong.
EMAIL_EXISTS409An account already uses that email.Log in instead, or use Forgot password.
FORBIDDEN403Your role cannot do that, or the record belongs to another loft.If you believe it is yours, contact the club admin.
MEMBERSHIP_PENDING403Your account exists but an admin has not approved it yet.Wait for the approval email. Until then you can read, not write.
MEMBERSHIP_REJECTED403Your membership request was turned down.The reason is on your membership page, and you can request again from there.
MEMBERSHIP_SUSPENDED403Your membership has been suspended.Contact the club admin.
NOT_FOUND404It 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_ERROR400One 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_EXISTS409A 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_ANCESTOR400The 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_MISMATCH400You 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_PARENT400The bird you picked still has sex U.Open that bird, set its sex, then link it.
PIGEON_HAS_DESCENDANTS409This 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_TOKEN404That 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_LARGE413The image is over the limit.5 MB for most pictures, 2 MB for the eye close-up.
UNSUPPORTED_FILE_TYPE415That 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_READY409You tried to import a scan before it finished parsing.Wait for the status to reach ready. The page polls by itself.
SCAN_ALREADY_IMPORTED409This scan's birds are already in your loft.Open the subject pigeon instead of importing a second time.
EGG_ALREADY_REGISTERED409A chick was already registered from that egg.Open the existing chick. Each hatched egg gives exactly one offspring slot.
PAIR_NOT_HATCHED409The pair is not at hatched or completed yet.Mark an egg hatched first. The action is hidden for every other status.
OFFSPRING_LIMIT409Every hatched egg on this pair already has a chick recorded against it.Mark another egg hatched. Retrying cannot help.
DRAFT_NOT_FOUND404That certificate draft does not exist, or belongs to another loft.Go back to the drafts list and open one from there.
CERT_FIELD_LOCKED400You 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_ERROR422The file could not be read as a CSV.Check the header row, the separators, and that the file is under 5,000 rows.
RATE_LIMITED429Too 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_RESULT409This 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_ERROR500Something 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.

Every formula below was read out of the running code. No number here is an estimate.