Qraft
  • What we do
  • Work
  • Team
  • Blog
  • Cowork
  • FR
  • /EN
Let’s talk

Our articles

Field notes, technical guides and working habits from our team.

Qraft
  • What we do
  • Work
  • Team
  • Blog
  • Cowork

Qrafting agentic software since 2020. Designed, written and coded at 36 rue Sainte, Marseille, by Nicolas, Alexis and Adrien. Write to us: hello@qraft.tech. © Qraft 2026.

  • Jun 12, 2026

    Mirroring a GitHub repository — issues, PRs and screenshots included

    Before: a repository hosted in an organization we don't control — 823 issues and pull requests, ~2,300 comments, 160 screenshots, 40 releases.

    Nicolas Rouanne

    →
  • Jun 12, 2026

    Replacing text in a PDF without it showing

    I wanted to fix a label in a generated PDF — replace Heures pleines / Heures creuses with Heures forfaitaires. Five minutes, I figured. It turned into a dive into how PDF fonts actually work, and a good lesson on the difference between « looks right » and « is right ». The script that came out of it fits in one file; the road to get there, much less so.

    Nicolas Rouanne

    →
  • Jun 3, 2026

    Chaining HLS videos into one player

    We needed a single video player to play a sequence of short clips back to back — like a playlist, but composed at request time from clips stored separately on Bunny Stream. The naive approach failed. The production-grade approach (double <video> elements) felt heavy. The thing that actually worked was server-side HLS playlist concatenation, with the player doing zero clip-switching logic of its own.

    Nicolas Rouanne

    →
  • May 19, 2026

    Building a local transcription pipeline without sending a single byte to the cloud

    I needed to transcribe sensitive recordings — therapy sessions, interviews, conversations that had no business living on OpenAI or Google servers. So, cloud out. A year and a dozen pivots later, the pipeline boils down to five stages, all offline once the models are downloaded.

    Nicolas Rouanne

    →
  • May 18, 2026

    Moving DNS and SSL certificates to Terraform — Cloudflare and cert-manager

    Before: every 3 months, run a script to renew 5 SSL certificates by hand. Copy/paste fullchain and private key into GitHub Actions secrets. Miss the deadline once and production goes down.

    Nicolas Rouanne

    →
  • May 7, 2026

    Managing Secrets with Chezmoi and 1Password Service Accounts

    I use chezmoi to manage my dotfiles across machines, with secrets stored in 1Password. Until recently, everything ran through my personal 1Password account. That worked fine for me alone, but once I started giving AI agents (Claude Code) access to the op CLI, I realized they could see every vault in my account. Not great.

    Nicolas Rouanne

    →
  • Apr 28, 2026

    I Vibe-Filled My French Tax Innovation Credit

    Filing the French CII (Crédit d'Impôt Innovation) is a yearly chore. The dossier needs personnel data, time tracking, payroll figures, and a project description detailed enough that a tax inspector won't bounce it.

    Nicolas Rouanne

    →
  • Mar 9, 2026

    Why I Version My .zshrc with chezmoi (After Claude Broke It Twice)

    I use Claude Code daily. It's great for writing code, but it has one annoying habit: it sometimes edits my .zshrc and breaks things. Last week it removed an alias I use constantly — cc for claude --worktree. The week before, it messed up my shell config in a different way. Both times, I had to manually fix it.

    Nicolas Rouanne

    →
  • Mar 5, 2026

    How We Built Our Blog with Notion, Next.js, and Granular Cache Invalidation

    I wanted a blog for the Qraft website, but I didn't want to build a full CMS or manage a database. We already use Notion internally, and it has a solid API. So the idea was simple: write articles in Notion, render them on the site with Next.js, and use Vercel's caching to keep things fast. It took 5 PRs to get there, and the final architecture turned out cleaner than I expected.

    Nicolas Rouanne

    →
  • Mar 4, 2026

    Automating monthly timesheets from Toggl with Claude Code

    I wanted to generate a monthly timesheet from Toggl — one that shows, per day, how many half-days I worked for each client. Simple enough on the surface. The tricky part turned out to be the rounding.

    Nicolas Rouanne

    →
Previous1234Next