Made for OpenAI DevDay Exchange · São Paulo

I build the night shift.

Dashboards, bots, schedulers and data pipelines that do the repetitive work while your team sleeps. I build them with AI as the working layer, and they run in production for clinics, a telemedicine marketplace and my own products.

Real schedule, simulated night. Drag the hands. Real schedule, simulated night. Tap the crown for another one.

A 12-hour watch that replays one night of my real job schedule, from the 00:30 doctor sync to the dashboard ready at 09:20, and then shows your current time.

12production repositories, June to September 2026
4,700+commits in those four months
40+projects: products, audits and research
15+years in IT, 13 of them leading teams

The work · six systems

The night shift, up close.

Each of these runs in production today. The screens are rebuilt with demo data so no client numbers leak. The mechanics are real.

Instagram tracker

Social Blade for a network of 1,000+ doctors.

Every morning it checks each doctor’s public profile, grades growth and posting rhythm, and ties site visits and paid orders back to the profile that sent them. The first full snapshot of the whole network cost $5.64 in API calls.

  • Grades have a ceiling: 30 days of silence means C at best, 90 days means D. Otherwise a dead account with old followers looks like a star.
  • Three failed checks in a row and a handle stops being tracked, so renamed accounts don’t come back from the dead every night.
  • Audience overlap math flags mass-followers and suspicious pairs of accounts.
  • From first commit to a full snapshot of the network: two days.
TypeScriptPostgreSQLsystemd timersTelegram alerts

Content pipeline · psy-wiki.ru

A publication that researches its own articles.

Every morning psy-wiki.ru picks a topic from real search demand, reads 4–6 sources (WHO, APA, NICE, PubMed), writes 2,500–5,000 words with an FAQ and runs the draft through a QA gate. Then it stops and waits for a human editor. Nothing publishes itself.

  • 91 topics queued across 7 clusters, about three months of work.
  • Two articles a day, on purpose. A young medical site that publishes like a content farm gets treated like one.
  • Authors claim topics from a shared pool, three at a time. Their sign-off becomes the reviewer in the page’s schema markup.
  • llms.txt for AI assistants and an IndexNow ping on publish, so Bing and Yandex see a new article within minutes.
Next.jsPostgreSQLDockerCaddyown VPS
Open psy-wiki.ru

Analytics dashboard

A dashboard that admits when it’s broken.

Orders, revenue per article, search positions, cancellations and how often AI assistants cite the brand, in one place. When a source goes down you get a red banner, because a zero and a broken connector are different numbers. Flip the switch on the screen and see.

  • Caught a “read to the end” goal that was 2.4× inflated. It fired on every page, not only on articles.
  • Two roles. Changing a role’s password logs out all its sessions at once, not when the token expires a week later.
  • Share of AI Voice, measured weekly: how often assistants cite the brand when people ask real questions.
  • Checked at 375, 768, 1280 and 1920 px, in dark and light, with a script instead of eyeballs.
Next.jsFastAPIPostgreSQLRecharts
analytics / overview
Demo data
Overview
Visits
48,210
▲ 6.2%
Paid orders
1,284
▲ 3.1%
Conversion
2.66%
▼ 0.1 pp
AI share
12%
▲ 4 pp
Analytics API isn’t responding since 06:12. This is an outage, not a zero.
Articles that bring paying patientsOrders
Iron deficiency: what to test first38
Night fever in children: when to call a doctor27
How to choose a psychotherapist19

LiveVideo consultations

Every room, recording and alert on one screen.

An operations panel for doctor–patient video calls on BigBlueButton. It follows each consultation from the room to the published recording, catches the ones that go wrong and keeps an audit trail of every manual fix.

  • Alerts are deduplicated and have a lifecycle: open, acknowledged, resolved. Try the button on the screen.
  • Processing time in percentiles, with an SLA for every status.
  • Four roles, an audit log and a confirmation step before anything destructive.
  • SQLite on purpose. The volume is small, and Postgres would only add work for whoever runs it.
Next.js 16React 19PrismaSQLitesync worker
ops / video-consultations
Demo data
Live now
7 rooms13 in calls1 alert
Rooms
Pediatrics#4821DRPA12:41
Therapy#4822DRPA04:07
Neurology#4819DRPA+127:55
Recordings
#4815Processing
9 min in statusSLA 30
#4811Published
took 11 minREC
Recording missing · #4790 ×1
p50 9 minp95 24 minaudit log: 3 today

Every 6 hScheduling & payouts

On-call shifts without the spreadsheet.

It replaced the WordPress plugin a clinic’s on-call service ran on. Doctors book their own shifts through a personal link, with no password to forget. The admin sees two weeks of coverage by specialty against the minimum. Hundreds of doctors and tens of thousands of shifts moved over without losing one.

  • Self-employed status is checked with the tax service’s API, not taken on anyone’s word.
  • Bank details are checked against the central bank registry and the account checksum, so a typo never reaches a payout.
  • It warns about bank accounts that are about to close before a payment bounces.
  • Doctors’ ratings and profiles sync from the public site every six hours.
Next.jsPostgreSQLPrismaDocker
duty / coverage
Demo data
Coverage · next 14 days
CMDr. Clara M. · payout checkPediatrics · booked via personal link
  • ✓Self-employed: activetax service API · 06:30
  • ✓Bank found in the registrycentral bank BIC list
  • ✓Account checksum OK20 digits, key verified
  • !Account closes on Nov 14new details requested

My productvisaunlocks.com

199 passports. Every route between them.

A travel-freedom tool that covers every one of the 199 × 199 passport-to-destination routes, plus 32 hand-checked “unlock rules”: cases where a visa from one country opens the door to another. Pick a passport. This is the real dataset, running in your browser.

–Visa-free
–Visa on arrival
–eTA or e-visa
–Visa required
Hover or tap a country to see its rule, then click it again to use that passport. Gold arcs are doors that a visa from a third country opens.Data: VisaUnlocks dataset. Rules change, so check official sources before you travel.

The expensive lesson

I grew the site to 20,019 pages. In August, 99.4% of its organic traffic vanished in 48 hours.

Almost all of those pages were generated passport pairs. I ran the forensics on Search Console exports, ruled out robots, canonicals, rendering and server errors, and found site-wide suppression for scaled content. So I cut the site back to 481 pages and made the rest return 410.

The rule I build by now: one page with depth beats a series of 19,800. That’s why the route checker above is one tool, not forty thousand pages.

Open visaunlocks.com
20,019 → 481pages, before and after the cut
−99.4%organic traffic in 48 hours, early August 2026
~130 → 1,740search queries with impressions, a month later
0.64% → 0.80%click-through rate before the crash and after the recovery

More from the workshop

Smaller tools, same standards.

Support · Telegram

AI drafts the reply. A person sends it.

A bot that routes customer questions to operators instead of answering them itself. An LLM sorts each question into six categories and drafts a reply. Below a confidence threshold it asks instead of guessing.

Automation backbone

13 jobs moved out of no-code, into code.

Every run lands in a Postgres table. Failures retry with backoff and ping Telegram. The visual no-code editor stays only where it actually wins.

GiveMind · my product

Telemedicine with the law written into the schema.

Doctors see their own patients by video. The doctor’s income and the platform’s fee are two flows that never mix anywhere in the data, and writing to someone else’s patient is impossible at the query level.

RGAMS · Brazil

Where Brazilian rhythmic gymnastics really happens.

Built on the national federation’s public API, at about 200 requests per scan instead of 3,000. The API also exposes minors’ personal data. I chose not to collect it.

34%

of all competition entries come from Paraná

219 clubs3,773 gymnasts20,237 entries

Backups

An offsite copy only its owner can read.

An encrypted backup of a team’s entire Airtable base, attachments included. Even the file names are encrypted. Hundreds of thousands of records, and a real restore to prove it works.

0

errors on the restore test

Language data

Brazilian vs. European Portuguese, measured.

631 million tokens of Brazilian and European subtitles, compared for a language app that should never teach you “autocarro” when you’re catching an ônibus.

5,704

Europeanisms on the blocklist

How I work

AI does the heavy lifting. I decide where it doesn’t go.

Models research, write, collect data and run the routine. Thresholds, priorities and the list of things we won’t build stay with a person. Four rules I don’t bend:

A backup counts after a restore.

Every backup in these projects has been restored at least once. Until then it’s a hope, not a backup.

Zero is not the same as broken.

A dead connector shows up as a red banner, not as a quiet zero in Monday’s report.

Code wherever things can break quietly.

No-code is fine for a visual flow. Anything that reads, transforms and sends moves to code, with logs, retries and git.

A number before the build.

Before building anything in-house I write down the number that would justify it. For example: no own eSIM stack before 235 sales a month.

  1. Show me the busywork

    One call where you walk me through what eats your team’s hours. I come back with what to automate first, and what to leave alone.

  2. First version in production

    Days, not months. Real data from day one, behind a login, with alerts switched on.

  3. A handover that sticks

    Tested backups, a living changelog and runbooks, so the tool doesn’t depend on me.

09:30 · Good morning

What should run while you sleep?

Pick what you need and I’ll turn it into a message you can send me on LinkedIn.

What would you like to automate?

Pick one or several.

Your message to Aleksandr

Copy & open LinkedIn

LinkedIn doesn’t let websites pre-fill a message, so the button copies it for you. Paste it into a message or a connection note.