DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Your personal AI writing studio: an AI document editor, social post templates, publishing, and voice dictation, all in one app for laptop, tablet, and phone.
Status: Phase 1 (setup + login) ✅ · Phase 2 editor + AI ✅ · Phase 3 dictation ✅ · Phase 4 voice profile ✅ · Phase 5 social templates ✅ · Phase 6 publishing ✅ · Home screen, styles, import ✅
New: The Daily Canvas — a calm daily planner at
/canvas(paper-planner sections, voice, Apple Pencil, offline, Google Calendar/Tasks). Setup: runsupabase/migrations/0010_daily_canvas.sql, deploy, open/canvas.
| Piece | What it does |
|---|---|
| Next.js 16 (TypeScript, Tailwind) | The app itself |
| Supabase | Login, database, file storage |
| Vercel | Hosting (keeps it online everywhere) |
| Claude API | All AI writing (Phase 2+) |
| Deepgram | Live voice dictation, English + Spanish (Phase 3) |
Only [email protected] can get in. The lock exists in three places: the database refuses any other sign-up, the server signs out any other account, and every page checks before it loads.
You'll copy a few values between websites. Keep a notes file open to paste them into as you go.
Go to supabase.com/dashboard → New project.
write-ai. Pick a strong database password and save it. Region: West US.When it's ready, open Project Settings → API Keys and copy:
https://xxxx.supabase.co)sb_publishable_; older dashboards call it the anon key)Open SQL Editor → New query, paste everything from supabase/migrations/0001_lock_signups.sql, and click Run. This is the "nobody but me" lock.
Easiest: paste all of supabase/setup-all.sql and click Run. It contains every database update (0001 to 0009), skips anything already done, and never deletes data, so it's safe to run again whenever the app gets a new update. (Or run them one by one:) Do the same with supabase/migrations/0002_documents.sql (documents, folders, version history, chat), then 0003_user_settings.sql (app settings, like which AI model to use), then 0004_voice.sql (writing samples and your voice profile), then 0005_posts.sql (social posts and custom templates), then (connected accounts, media storage, brand kit), then (multiple writing styles and the Trash; your existing voice profile moves into a style called "My voice"), then (access codes for your AI assistant).
The installed phone app can't open email links (they open in Safari/Chrome instead), so the email will also include a code you can type in.
<h2>Sign in to Write.ai</h2>
<p><a href="{{ .ConfirmationURL }}">Tap here to sign in</a></p>
<p>Or enter this code: <strong>{{ .Token }}</strong></p>
Write.ai.Write.ai, and your email for the contact fields. Under Test users (sometimes called Audience), add [email protected]. You can leave the app in "Testing" forever, since you're the only user.https://YOUR-PROJECT.supabase.co/auth/v1/callback (use your Supabase Project URL)write-ai and copy it (it starts with sk-ant-). You only see it once.write-ai. Set the permission to Member (needed so the app can create short-lived keys for your browser) and the expiration to Never.DEEPGRAM_API_KEY (type Secret, all environments), then redeploy.Go to vercel.com/new → import the cenmar66/write GitHub repo.
Before clicking Deploy, open Environment Variables and add:
| Name | Value |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | your Supabase Project URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | your publishable key |
ALLOWED_EMAIL | [email protected] |
ANTHROPIC_API_KEY | your Claude API key |
DEEPGRAM_API_KEY | your Deepgram API key |
Added a variable after deploying? Go to Deployments → ⋯ → Redeploy so it takes effect.
Click Deploy. You'll get a web address like write-ai-xxxx.vercel.app.
Upgrade to Pro: Settings → Billing.
Production branch: until this work is merged into main, go to Settings → Git → Production Branch and set it to claude/ai-writing-app-plan-21oakz. (Or ask Claude to open a pull request into main.)
Supabase → Authentication → URL Configuration:
https://YOUR-APP.vercel.apphttps://YOUR-APP.vercel.app/auth/callbackhttp://localhost:3000/auth/callback (only needed if you run it on your computer)Inside the installed app, sign in with Google or with the 6-digit email code.
.txt, .md, .docx, .html) for the AI to draw from. The mic lets you say your idea instead of typing.Open Styles in the menu. A style is a way of writing the AI learns from examples: "My voice", "Client emails", "Newsletter", or even an author you admire.
.txt, .md, or .docx files, or pick from your documents. Aim for 1,500+ words across 3 to 10 pieces. English, Spanish, or both. (For PDFs, copy and paste the text.)Where styles apply: each document can have its own style (model menu in the editor's bottom bar), the home prompt box and post composer have a style pill, and the repurposer uses the document's style unless you pick another. Styles apply to every AI action and to chat replies, but not to grammar fixes or dictation cleanup (your exact words stay). The switch at the top of the Styles page turns them off everywhere unless you pick one yourself.
Open Posts in the menu.
Templates: 17 proven formats in six groups: hooks, lists, stories, how-tos, threads, and carousels. Pick one, type or dictate your idea (the mic is in the idea box), choose platforms, and tap Draft my posts. You get one post per platform, each written for that platform.
Platform rules built in:
| Platform | Limit | Notes |
|---|---|---|
| 3,000 characters | Only about 210 show before "see more"; the card shows you exactly what does | |
| X | 280 per post | Links count as 23; threads supported |
| Threads | 500 per post | Threads supported |
| 63,206 | Best under ~500 | |
| 2,200-character caption | Carousels supported; up to 5 hashtag suggestions |
Edit freely: the counter turns red when a post is too long. Shorten to fit trims it for you. Add or remove hashtags, edit thread posts and carousel slides, then Copy or Save draft.
Repurpose a document: pick a document, the platforms, and how many posts per platform, and get a set of posts with different angles. In the editor, the megaphone button does this in one click.
Your own templates: tap New template. Paste a post you love and tap Fill in the template for me, or write the structure yourself.
Drafts, Scheduled, Published tabs keep everything organized.
Instagram's hashtag limit is in flux (30 per post on some accounts, 5 on newer ones), so the app suggests at most 5.
Posts → Prompts is a library of writing prompts grouped into packs (Traits, Milestones, Tools, and more). Each prompt is tagged Atomic Essay, Short Form, LinkedIn, or Thread. Pick one, jot your answer (or dictate it), and the AI turns it into posts in your style.
Create a pack with AI: type any theme (for example "lessons from the restoration business") and, optionally, a line about you. Claude writes a fresh pack of 6-12 prompts. Remove the ones you don't want, rename the pack, and Save pack. Your packs appear first in the grid; the trash icon deletes one. (Needs the 0009 database update, included in supabase/setup-all.sql.)
Open any saved post (Posts → Drafts) to publish it:
Substack: in any document, tap the newspaper icon. The AI suggests a title, subtitle, preview text, and a teaser Note. Then either Create Substack draft (lands in your Substack drafts; you publish from Substack) or Copy formatted + open Substack (paste into a new post). Substack has no official API, so drafts use your login cookie (stored encrypted). Notes can't be drafted through any API, so the Note is copied and Substack Notes opens.
| Platform | How it posts | Cost | Notes |
|---|---|---|---|
| Automatic | Free | Personal profile works right away; company page after LinkedIn approves your app | |
| Facebook Page | Automatic | Free | One login connects Facebook and Instagram |
| Automatic | Free | Business or Creator account linked to a Facebook Page. About 50 to 100 API posts per day | |
| Threads | Automatic | Free | Up to 250 posts per day; login refreshes itself |
| X | Copy + open | Free | X's posting API is paid, so it's done by hand |
| Substack | Drafts only | Free | Unofficial; copy backup always works |
A. Three new settings in Vercel (Settings → Environment Variables, type Secret, all environments, then redeploy):
| Name | What to put |
|---|---|
ENCRYPTION_KEY | A long random password (40+ characters) from your password manager. Never change it later, or saved connections stop working. |
CRON_SECRET | Another long random password. Vercel uses it when running the scheduler. |
SUPABASE_SECRET_KEY | Supabase → Project Settings → API Keys → Secret keys → create one (starts with sb_secret_). |
The scheduler is set up in vercel.json to run once a day (8 AM Pacific), because Vercel's free Hobby plan allows nothing more often. A more frequent schedule makes Vercel refuse to deploy the app at all.
Want posts to go out on time (every 5 minutes) for free? Let Supabase run the timer instead. In Supabase, go to Database → Extensions and turn on pg_cron and pg_net. Then run this in the SQL Editor, replacing the two values:
select cron.schedule('publish-due-posts', '*/5 * * * *', $$
select net.http_get(
url := 'https://YOUR-SITE.vercel.app/api/cron/publish',
headers := jsonb_build_object('Authorization', 'Bearer YOUR_CRON_SECRET')
);
$$);
(On Vercel Pro you can instead change the schedule in vercel.json to */5 * * * *.)
B. Instagram + Facebook (one Meta app, one login):
Write.ai. When asked for use cases, pick the ones for managing your Facebook Page and managing content on Instagram (Meta renames these often; choose the closest match). If asked for an app type, choose Business.META_APP_ID and META_APP_SECRET.https://YOUR-APP.vercel.app/api/connect/meta/callback → Save.B2. Instagram without Facebook (optional, instead of B for Instagram):
Use this if your Instagram isn't linked to a Facebook Page. Your Instagram must be a Business or Creator account (Instagram app → Settings → Account type and tools).
INSTAGRAM_APP_ID and INSTAGRAM_APP_SECRET.https://YOUR-APP.vercel.app/api/connect/instagram/callback (Settings shows the exact address with a Copy button).If both are connected, the direct Instagram connection is the one used for Instagram posts.
C. Threads (same Meta app):
THREADS_APP_ID and THREADS_APP_SECRET.https://YOUR-APP.vercel.app/api/connect/threads/callback.D. LinkedIn:
LINKEDIN_CLIENT_ID and LINKEDIN_CLIENT_SECRET. Under Authorized redirect URLs add https://YOUR-APP.vercel.app/api/connect/linkedin/callback.LINKEDIN_ORGANIZATION_POSTING to true in Vercel, redeploy, reconnect LinkedIn, and choose your company under Post as.E. Substack: Settings → Connected accounts → Substack → Connect. The form explains how to copy your substack.sid cookie.
Pick the model in Settings → AI model, or tap the little model name in the editor's bottom bar. Your choice is saved to your account, so it follows you to every device.
| Model | Best for | Rough cost |
|---|---|---|
| Claude Opus 5.5 (default) | Best all-round writing | ~2¢ per edit |
| Claude Sonnet 5.5 | Fast and sharp, half the price | ~1¢ per edit |
| Claude Haiku 5.5 | Quick fixes, cheapest | a fraction of a cent |
| Claude Fable 5.1 | Anthropic's most capable, premium price | ~5¢ per edit |
If your Claude account can't use a model, the AI shows a plain message and you can switch to another one.
Local AI (later): the app talks to AI through "providers" (src/lib/ai/providers/). Claude is one provider. A local model becomes a second provider file plus an entry in src/lib/ai/models.ts, and nothing else changes. One thing to know ahead of time: the app runs on Vercel's servers, so a model on your own computer has to be reachable from the internet (for example through a secure tunnel), or you run the app on that computer.
cp .env.example .env.local # then fill in the values
npm install
npm run dev # open http://localhost:3000
Your assistant gets its own access code instead of your login. Codes only work with the assistant API below. They can't open the app's pages or change settings.
wai_). It's shown once; only a fingerprint is stored.https://YOUR-SITE/api/v1. It sends the code as a header: Authorization: Bearer wai_….| Request | What it does |
|---|---|
GET /api/v1 | Checks the code works and lists everything below |
GET /api/v1/documents?q=word | Lists or searches documents (newest first) |
GET /api/v1/documents/{id} | Reads one document as Markdown |
POST /api/v1/documents | Creates a document: { "title": "…", "markdown": "…" } (write codes) |
PATCH /api/v1/documents/{id} | Replaces text (markdown), adds to the end (append), or renames (title). The old version is saved in History first (write codes) |
DELETE /api/v1/documents/{id} | Moves a document to the Trash (write codes) |
GET /api/v1/styles | Lists your writing styles, so the assistant can write like you |
Needs: the 0008 database update (included in supabase/setup-all.sql) and SUPABASE_SECRET_KEY set in Vercel. Revoke a code in Settings and it stops working immediately.
mip_opt_out setting).| Service | Cost |
|---|---|
| Vercel Pro | $20 |
| Supabase Pro | $25 |
| Claude API (normal personal use) | ~$5–20 (about 1–3¢ per AI edit, 2–5¢ per chat message) |
| Deepgram (~10 hrs of talking) | ~$5, covered by the $200 free credit for a long time |
| X / Twitter | $0 (we use a "copy + open X" button) |
| LinkedIn, Facebook, Instagram, Threads, Substack | $0 |
| Total | ~$50–70/mo |
src/
app/
(app)/ # pages behind login: home, docs, posts, calendar, settings
api/ai/ # AI endpoints (edit + chat); the API key never leaves the server
login/ # sign-in screen
auth/ # login callback + sign out
manifest.ts # makes it installable as a phone app
components/ # shared UI pieces (nav, logo, theme toggle)
components/editor/ # the writing screen: AI menu, chat, history, export
components/dictation/ # the dictation panel
components/social/ # post cards, platform picker, results grid
lib/social/ # platform rules, templates, post prompts, quote cards
lib/publish/ # posting to LinkedIn, Facebook, Instagram, Threads, Substack (server-only)
app/api/cron/ # the scheduler (Vercel daily, or Supabase every 5 minutes)
lib/dictation/ # microphone capture + live Deepgram transcription
lib/ai/ # prompts, model list, voice profile, and providers (Claude today, local AI later)
lib/supabase/ # database/login helpers
proxy.ts # checks every request: are you the owner?
supabase/migrations/ # database setup scripts (run in order)
scripts/make-icons.mjs # regenerates app icons
Whenever a new phase adds a file in
supabase/migrations/, run it the same way, in number order.
Upgrade to Pro (you chose this): Organization → Billing → Upgrade.