Wenlan
Wenlan은 소스 기반 AI 지식베이스·LLM 위키로, 문서·결정을 페이지화해 검색·검토·리뷰 가능
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A whiteboard for your day. Type what you want to get done, and it becomes sticky notes. Work on up to three at a time, drop the finished ones in the tray, and at the end of the day the app writes you a short note about how it went.
Live at https://sticky-day.vercel.app — sign in with Google or email and you're on the board.
Built in Nairobi by Joseph Macharia as a way to learn how to build with AI models by making something worth using every day. The code is open.
Board. One text box: "What do you want to get done today?" Write it the way you'd say it — "reply to Sarah about the budget, 30 min run, water the plants, book the dentist". The AI splits that into sticky notes, each with a rough time and a priority (low, medium or high). They land on the board in random colours. Drag them around. If you've written more than fits in your day it tells you so, gently.
Pick a note up to edit it. Drag it to the clipboard to work on it — a timer starts, and every note on the clipboard (up to three) keeps timing. Drag it to the Done tray when it's finished, or to the bin if it shouldn't have existed. The bin is restorable.
You can try the board on the landing page before signing in. There the splitting is a quick rule-based one in your browser (no AI, nothing sent anywhere), with three example days the AI made earlier. Sign in and the notes come with you.
Whatever you don't finish rolls over to tomorrow's board by itself, with a small "from Thursday" stamp so you know it's been waiting.
Calendar. A month of small rings — each one is how much of that day got done. Click a day and a drawer slides in with what you finished, what you didn't, and the note the app wrote about it. Past days are read-only.
Your day. At a time you choose (6pm by default, in your timezone), the app writes a short page about your day: what you did, something to read on a rotating theme — why writing it down makes it lighter, carrying something over is deciding, not failing, rest counts as a note — and one concrete thought for tomorrow. It's written like a friend texting, not a report. No minutes, no percentages, no standup. There's a Copy button if you want the text.
That's the whole thing. Three pages.
There are exactly two AI calls in the app, and both follow the same shape:
generateObject). If the answer doesn't fit, it's rejected.Models are tried in order from AI_ORDER in the environment (provider:model,provider:model,…). If the first one is down or rate-limited the next one is tried. Adding a provider is one case in lib/ai/model.ts. Right now it runs on free tiers from Google (Gemini) and Groq.
Each account gets 60 AI calls a day, counted in the database where the browser can't reset it.
Every model attempt is logged for debugging: the task, the model, how long it took, and the first 80 characters of what you typed. A nightly pg_cron job deletes log rows older than 30 days.
@ai-sdk/google, @ai-sdk/groqYou need a Supabase project, at least one AI provider key, and Node 22+ (the AI SDK needs it). Google sign-in and email/password both work; you can enable one or both.
Privacy. What the hosted version keeps and who can see it is on the privacy page. On Gemini's free tier, Google may use what's sent to improve its products, and human reviewers may read it, de-identified. Because of that, the hosted version is for people outside the EEA, UK and Switzerland for now; if you're there, run your own copy with your own keys.
git clone https://github.com/Josekariz/sticky-day
cd sticky-day
npm install
cp .env.example .env # fill the Required block — see below
npx supabase link --project-ref <your-project-ref>
npx supabase db push # creates the tables, policies and functions
npm run dev
Open http://localhost:3000. Finish the Supabase auth steps below before sign-in will work.
Copy .env.example. Only the Required block is needed to boot the app.
| Variable | Where it comes from |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API → Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Same page → anon public key. Never the service role. |
AI_ORDER | Comma-separated provider:model list tried in order, e.g. groq:…,google:… |
GOOGLE_API_KEY and/or GROQ_API_KEY | At least one key matching a provider in AI_ORDER |
Without these, the form still saves the message in the database; email delivery is skipped.
| Variable | Purpose |
|---|---|
RESEND_API_KEY | Resend API key — used only by /api/contact |
CONTACT_TO | Inbox that receives Say hi messages |
CONTACT_FROM | Sender address. Default [email protected] only reaches your own Resend account until you verify a domain |
RESEND_API_KEY does not send password-reset or signup emails. Those go through Supabase Auth (see Auth emails below).
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗