Vigie
July 20268 min readOngoing
For a long time my life lived in ten places that never spoke to each other. Notes in one app, the calendar in another, tasks in a third, reminders on the phone, and everything else, the things I thought about while walking, nowhere at all. Each tool did its own job properly. None of them knew what the others were doing. The question that started the project was not "which tool am I missing", it was: why can nobody tell me what happened last week without me piecing it back together by hand across four applications?
Vigie is my answer. It is a private, single-user site running on my own server, with no sign-up page and no second account. It holds the journal and personal tracking, the calendar, tasks, reminders and professional record in one database I can ask a question across.
A day with Vigie
In the morning I get a notification: what happened yesterday, what is on today, which tasks are overdue. It is the starting point of the day, and it is usually the only time I read Vigie without writing to it.
During the day, when an idea shows up, I open the app and write it down. No category to pick, no form: I write the sentence as it comes and close the tab. It takes fifteen seconds.
In the evening, on my way home, or after something significant during the day, I take a moment to say what I did. I ask whatever questions I have while I am there, along the lines of "what did I write about this last month". Then I close it.
The rest of the time, Vigie asks for nothing.
One place, two halves
The first decision was to keep personal and professional apart. They run on different rhythms: one is read day by day, the other is read back at the end of a quarter, when you need to remember what you actually shipped.
So Vigie has two halves, each with its own dashboard, journal and calendar. A coral accent marks the personal side, a blue one the professional side; that is the only thing that changes when you switch, and it is enough. On the professional side two objects carry everything: the log of working days and the achievements, the list of what got done, which I add to as I go rather than at review time.
Tasks, reminders and search are shared by both halves, because a day does not actually split in two.
Writing instead of clicking
The central bet in Vigie is that the main interface of a second brain is not a form, it is a conversation.
Adding a journal entry by clicking means opening the right page, picking the right date, filling the right fields, saving. I did that for two weeks, then I stopped. In Vigie I write what I have to say, the way I would send it to someone, and the assistant files it: it creates the entry, dates it, puts it on the right side, adds the task I mentioned in passing, schedules the reminder I dropped at the end of a sentence.
The engine is Claude Code in headless mode, the same command-line tool I use to write code, launched by the server against a folder of markdown notes. Two practical consequences follow.
The assistant does not write to the database by guesswork. It has a set of tools I wrote myself, exposed over the MCP protocol, each matching one precise action: add a task, change its status, schedule a reminder, record an entry, log an achievement, search the data. The list of possible writes is therefore fixed and readable.
The underlying data stays readable without Vigie. Notes are markdown files in a folder, structured data lives in a SQLite database, a single file any tool can open. If the app stops, the content is still there.
One constraint worth stating: a single conversation turn runs at a time across the whole app. It comes from running on a subscription rather than per-call billing. A message sent while a turn is running goes into a queue, displayed under the answer in progress, instead of firing in parallel.
Asking without leaving a trace
Not every question deserves to be kept. "What did I write about this in May" has no reason to end up in a conversation history, or to open a write permission.
Vigie therefore has two modes. The chat is an ongoing conversation: it remembers, it writes, it edits. Search across the notes is a throwaway read-only turn: no message stored, no context resumed, and no write tool available during that turn, not disabled but absent. The answer is displayed, and nothing is kept from it beyond the usage counter.
The morning summary
Every morning Vigie puts together a briefing on the day ahead: today's calendar, overdue tasks, the weather, a note from yesterday, and sends it as a notification. The wording is written by the assistant, but the data is gathered beforehand by ordinary queries. The distinction matters: I do not ask an AI to go and find what is in my calendar, I hand it what is there and ask it to phrase it. What gets displayed is accurate by construction; only the wording is generated.
Each source in the summary can be turned on or off from the settings, and a source that is off is neither gathered nor mentioned. The sending time is set the same way. None of this lives in a configuration file: whatever has to change at runtime lives in the database, and the app reads it back without a restart.
The same channel carries one-off reminders and technical alerts, an access token about to expire, a sync that failed. With a repetition rule: the same alert is not resent more than once every six hours, unless the situation got worse in the meantime.
What comes in, what does not go out
Vigie reads things that do not belong to it: the calendar, mail, code repositories. The rule is that it reads them and does not touch them.
Mail and development activity are neither synced nor stored: they are read at the moment an answer needs them, read-only, then forgotten. The calendar is the exception, because the interface has to display it at all times: it is copied into the database on a schedule, but that copy is a one-way mirror. The assistant never writes to it and nothing is ever published back to the original calendar.
The rest follows the same logic. The data lives on my own server and with a provider chosen for its privacy guarantees. Authentication asks for a password and a security key at every login, not one or the other. Account creation is closed server-side: the account already exists, and it is the only one.
Why not an existing tool
Personal agents exist, OpenClaw and Hermes Agent among them, and I knew about them before starting. They did not match what I was looking for, for three reasons.
I wanted my own web interface. Not just a conversation, but screens built to be read quickly: the dashboard for the day, the calendar, the list of achievements. An agent that answers well does not replace a page you scan in three seconds.
I wanted end-to-end control over the data. To know where it is stored, in what format, what reads it, what writes it, and to be able to open it without going through the tool that produced it.
And I did not want a heavyweight setup for a need this size. Vigie serves one person, on one server, with one SQLite file. Anything beyond that, orchestration, plugins, generic extensibility, was dead weight.
It is a trade-off, not a verdict: writing your own costs time that installing an existing tool does not.
Under the hood
Vigie is a Bun monorepo. The server is an ElysiaJS API with real time over SSE, a server-to-client stream, never WebSocket, because nothing here needs a bidirectional channel. Data sits in SQLite through Drizzle. The front end is React 19 with the compiler enabled, Tailwind 4 and shadcn/ui. Everything is typed end to end: the API type is exported by the server and consumed by the client, so a renamed route breaks the front-end build before it breaks anything in production.
The design, called "soft cockpit" internally, comes down to a few choices: a slightly blue-tinted light background rather than white, grey-blue ink rather than black, two accents for the two halves, two typefaces. A tool you open in the morning before coffee does not need maximum contrast.
Deployment is a Docker container driven by Dokploy on a server I rent, pushed by a webhook on commit. Data and sessions live outside the image, in volumes, and are backed up to encrypted storage.
Where the project stands
Vigie runs in production, every day, for a single user. It is a personal tool in the strict sense, and a good part of its value comes from that.
The project is ongoing. There is a list of things to add and another of things to simplify. What I take from it so far: what kept me using it was not adding AI to my notes, it was no longer having to file them. As long as I had to pick a category before writing, I did not write.