← All posts

What we refuse to build

Our feature list is also a refusal list: no analytics, no third-party JavaScript, no server-side AI. Saying no is how a privacy promise stays true.

Most feature pages list what an app can do. Ours could run the other way: weekkii is defined at least as much by what we refuse to build. The refusals are deliberate, and we think they are the product.

Start with the obvious ones. No analytics SDKs. No ad pixels. No session replay. No chat widget in the corner. In fact, no third-party JavaScript at all: our Content Security Policy is strict, and connect-src allowlists exactly one host, our own Supabase project. Your browser cannot send a request to anyone else while weekkii is open, not because we promise nicely, but because the policy blocks it before it leaves the tab.

The reasoning is blunt. Every SDK is someone else's code running with your session: your cookies, your DOM, your keystrokes if it chooses to look. Every integration is a second company in the room while you plan your week. You can read our privacy policy, but then you would also have to read theirs, and their subprocessors' policies, and trust that a minified bundle updating on someone else's schedule never changes what it collects. A privacy promise is only as strong as the dumbest dependency in the bundle, so we removed the bundle.

We hold that line even where it costs us. No Sentry, no PostHog. When weekkii throws an error, it gets written to a table in our own Supabase project, the same infrastructure that already holds your encrypted data. Triaging crashes with SQL queries is clumsier than a polished error dashboard. It also means an error report never leaves a machine we control.

Some refusals are not even discipline, just math. There is no server-side AI in weekkii, and there cannot be. The server stores ciphertext, encrypted on your device with a key derived from your passphrase through Argon2id, a passphrase the server never sees. A model on our side would have nothing to read. We did not resist the temptation; we made the temptation impossible.

The same logic killed two-way calendar sync. Reading your calendar means reading your event titles, and event titles are some of the most sensitive text people produce: doctors, interviews, lawyers, dates. We would rather lack the feature than hold that data. There are also no team features, no comments, no permissions. Permission systems are where sharing bugs live, and a to-do list your manager can open stops being honest. The tagline is literal: your week, yours alone.

There is a quieter reason underneath all of this, and it is not idealism. Every refused feature is maintenance we do not carry. No SDK to update, no breaking API change to chase, no vendor breach notification to forward to you with an apology. weekkii is built by a very small team, and a product that small keeps its promises only if the promise surface stays small too. Saying no is what keeps every yes honest.

The honest cost: we fly blind more than most teams. We have no funnels, no heatmaps, no replay of the session where someone clicked a button four times and gave up. If a screen confuses people, no chart tells us. We find out when someone takes the time to write a support email, or when we trip over the rough edge ourselves. Sometimes that means we are slower to see what confuses people, and some rough edges surely live longer here than they would at a company with a growth team.

We think that trade runs in your favor. The observability stack for weekkii is an error table, an inbox, and the app itself, open on our own screens, seven columns wide, this week's tasks staring back at us the same way yours do.