Services · 2026
A site for a bar collegium
The roster, the areas of practice and the contacts — a static site that collects nothing about its visitor.
- Client
- Коллегия адвокатов Курчатовского района Челябинска
- Time taken
- 4 weeks
- What we did
- Design · Development · Content · Infrastructure
The brief
Show the collegium and its advocates — and collect nothing about the visitor.
An advocate may not be advertised. So the site does not promote; it lets the reader check: each advocate’s standing can be looked up by their number in the register of the Chelyabinsk region’s chamber of advocates.
Stages · 4 weeks
How the work went
Stage 01
Constraints
Advertising an advocate is forbidden, and every text and every block grew out of that rule.
- Judgements of quality✕ not allowed
- Promises of an outcome✕ not allowed
- Client testimonials✕ not allowed
- A word about anyone’s case✕ not allowed
Stage 02
Copy
Written against 63-ФЗ and the advocates’ code of professional ethics: what we do, not how well.
The bestadvocates in townguarantee a win in courtThe collegium’s advocates help at every stage — from the first consultation and the paperwork to representation in court.
an example editStage 03
Roster and practice
Registry number, years of standing and specialisation on the card. A page for each advocate, a filter by area of law.
Stage 04
The «Through time» scene
The collegium’s age is cut out of the background, and the group photo shows only through the numbers. The scroll does the rest.
Stage 05
Development
A static Next.js export. Three motions on CSS scroll timelines, one scene on GSAP.
/* the header’s tone, without JavaScript */ .header { animation: tone linear both; animation-timeline: scroll(root); }Stage 06
Deploy
GitLab CI builds, rsync delivers, a symlink switches the release. Rollback is the same symlink pointed at the previous one.
- build
- rsync
- ln -sfn
- Caddy
A decision
There is no contact form
We proposed doing without one, and the collegium agreed. No form, no personal data — and the site never becomes their operator.
0pieces of personal data collected. What is left is what people come for.
- Name and phoneData operator status
- MessageA token somebody must guard
- I consent to the processing of my personal dataA consent box
- Privacy policyA processing policy to keep true
- SendA filing with the regulator
- Phones
- +7 (351) 741-76-81 +7 (351) 741-76-82
- advokatt5561@gmail.com
- Address
- Chelyabinsk, 55 Kuybysheva St, office 61
The map loads only when somebody scrolls that far. It is the single third-party request on the page.
The client’s scene, played by our scroll
Through time
Through timeThe collegium’s age is cut out of the background; the photo shows only through the numbers. The page flies inThe scroll enlarges the numbers until the gap in them is the whole screen. 1989 — foundedThe ruler of years stops at the first date; the photo is still without colour. 2003 — a new nameThe years roll on, and colour slowly returns to the photograph. TodayThe ruler reaches the current year and the colour is back in full. The scene ends where it began.
Details
What is easy to miss
Move the loupe over a screen, or pick an item from the list.
Specification
What it is built from, and why
| No. | Component | Where | Why |
|---|---|---|---|
| 01 | Next.js · static export | Build | The site builds to static files: no database, nothing running that can fall over at night. |
| 02 | React · TypeScript | Interface | The roster, the filter by area of law, a page for each advocate. |
| 03 | SCSS | Styles | Each component’s styles live next to it. |
| 04 | CSS scroll timelines | Motion × 3 | The first screen, the header’s tone and the reading line run without JavaScript. |
| 05 | GSAP ScrollTrigger | Motion × 1 | Only the «Through time» scene: it has to measure a glyph to know where to fly and hold eight moves on one clock. |
| 06 | Map · lazy | Contacts | Loads only when somebody scrolls that far. The single third-party request on the page. |
| 07 | Caddy | Server | Serves the static files from a small server. |
| 08 | GitLab CI · rsync · symlink | Deploy | A release is an rsync and a symlink switch. A rollback is the same symlink, pointed back. |
Motion budget
Exactly four motions
The project’s conventions name them one by one. Anything beyond the list does not get into the code.
- First screenCSS
- The header’s toneCSS
- Reading lineCSS
- The «Through time» sceneGSAP
Releases
Deploy and rollback are one command each
/srv/advokaty74/
releases/
- r01/
- r02/
- r03/← current
Not on the server
a databaseDockera process to fall over at night