VixFlow Documentation
Everything you need to know about using VixFlow to manage your freelance business. From setting up your API key to creating AI-powered proposals.
What is VixFlow?
VixFlow is a local-first freelance management platform. It helps you manage clients, create professional proposals, send invoices, and track projects — all powered by AI.
Key Concepts
- Local-first: Data lives in your browser. No accounts to manage, no cloud required.
- AI included: AI features are bundled in all plans — no API key needed, no extra cost. VixFlow handles everything.
- Export anytime: All data can be exported as JSON or PDF at any time.
- No vendor lock-in: Your data is always yours and always portable.
Quick Start
Get up and running with VixFlow in under 5 minutes.
- Open the app — Visit vixflow.app in your browser. No sign-up required.
- Add your first client — Click "Clients" in the sidebar → "Add Client". Fill in name, email, and company.
- AI is ready to use — No setup needed. VixFlow AI is included in your plan. Open AI Writer and start generating proposals instantly.
- Create a proposal — Click "Proposals" → "New Proposal". Select your client, describe the project, and let AI write the first draft.
- Send an invoice — When work is done, go to "Invoices" → "New Invoice". Link it to a project and generate a professional PDF.
AI Features — Included in All Plans
VixFlow AI is fully bundled — no API key required, no setup, no extra cost. You don't need an Anthropic account or any third-party credentials. Just open the AI Writer and start generating.
AI models by plan
- Free plan — Claude Haiku · 5 requests/day · Fastest generation
- Starter plan — Claude Haiku · 20 requests/day
- Pro plan — Claude Haiku + Sonnet · 50 requests/day · Higher quality output
- Agency plan — All models including Opus · 200 requests/day · Maximum quality
Data & Storage
VixFlow stores all data locally in your browser using localStorage. Here's what gets stored and where:
| localStorage Key | Type | Contains |
|---|---|---|
| vixflow_clients | Array | All client records |
| vixflow_proposals | Array | All proposals |
| vixflow_invoices | Array | All invoices |
| vixflow_projects | Array | All projects |
| vixflow_expenses | Array | All expenses |
| vixflow_settings | Object | User preferences, API key, business profile |
Client Data Model
Each client record contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier (UUID) |
| name | string | Client full name |
| string | Client email address | |
| company | string | Company or organization name |
| phone | string | Phone number (optional) |
| country | string | Country code (e.g. "BD", "US") |
| currency | string | Preferred currency (e.g. "USD") |
| tags | string[] | User-defined labels |
| notes | string | Private notes about the client |
| createdAt | ISO date | When the client was added |
AI Writer
The AI Writer uses Claude to generate professional proposals, invoice descriptions, and follow-up emails. Here's how it works:
async function generateProposal(projectDescription, clientName) { const apiKey = getStoredAPIKey(); if (!apiKey) { toast('Please add your Claude API key in Settings', 'warning'); return null; } const prompt = `Write a professional freelance proposal for: Client: ${clientName} Project: ${projectDescription} Include: executive summary, scope of work, timeline, and pricing section.`; const res = await fetch('https://api.anthropic.com/v1/messages', { method: 'POST', headers: { 'x-api-key': apiKey, 'anthropic-version': '2023-06-01', 'content-type': 'application/json' }, body: JSON.stringify({ model: 'claude-haiku-20240307', max_tokens: 1024, messages: [{ role: 'user', content: prompt }] }) }); const data = await res.json(); return data.content[0].text; }
Proposals
Proposals are the core selling tool in VixFlow. Create polished, professional proposals with AI assistance and track their status in real time.
Proposal fields
| Field | Type | Description |
|---|---|---|
| id | string | UUID |
| clientId | string | Reference to a client record |
| title | string | Proposal title |
| content | string | Full proposal text (Markdown supported) |
| status | enum | "draft" | "sent" | "viewed" | "accepted" | "rejected" |
| value | number | Proposed project value |
| currency | string | ISO 4217 currency code |
| createdAt | ISO date | Creation timestamp |
| sentAt | ISO date | When the proposal was sent (optional) |
Creating a proposal with AI
In the Proposals view, click New Proposal → select a client → enter a project description → click Generate with AI. Claude will write a complete proposal including an executive summary, scope of work, timeline, and pricing table. You can edit any section before sending.
Invoices
Create professional invoices, track payment status, and generate PDF exports for your clients. Invoices can be linked to proposals and projects for complete project tracking.
Invoice fields
| Field | Type | Description |
|---|---|---|
| id | string | UUID |
| invoiceNumber | string | Auto-generated (e.g. "INV-0042") |
| clientId | string | Linked client reference |
| projectId | string | Linked project (optional) |
| items | LineItem[] | Array of {description, qty, unitPrice, total} |
| subtotal | number | Sum before tax |
| taxRate | number | Tax percentage (e.g. 15 for 15%) |
| total | number | Final amount due |
| status | enum | "draft" | "sent" | "viewed" | "paid" | "overdue" |
| dueDate | ISO date | Payment due date |
Projects
Projects help you organise work across multiple clients and track progress. Link proposals and invoices to a project for a complete view of your income pipeline.
Project fields
| Field | Type | Description |
|---|---|---|
| id | string | UUID |
| clientId | string | Linked client |
| name | string | Project name |
| description | string | Project details |
| status | enum | "active" | "completed" | "paused" | "cancelled" |
| budget | number | Agreed project budget |
| startDate | ISO date | Project start |
| deadline | ISO date | Delivery deadline (optional) |
| tags | string[] | User-defined tags |
Expenses
Track your business expenses to understand your true profit margin. Expenses can be linked to a project for per-project P&L analysis.
| Field | Type | Description |
|---|---|---|
| id | string | UUID |
| projectId | string | Linked project (optional) |
| category | string | e.g. "Software", "Design Assets", "Travel" |
| description | string | Expense description |
| amount | number | Cost in the selected currency |
| currency | string | ISO 4217 code |
| date | ISO date | When the expense occurred |
| receipt | string | URL or note about the receipt (optional) |
AI Proposal Generation
VixFlow's AI proposal writer uses Claude to create complete, professional proposals in seconds. Here's how the prompt is structured internally:
const systemPrompt = `You are an expert freelance proposal writer. Write professional, persuasive proposals that win clients. Format output in clean Markdown.`; const userPrompt = `Write a detailed freelance proposal for: Client: ${clientName} Project: ${projectDescription} Budget: ${budget} Timeline: ${timeline} Include: 1. Executive Summary (2-3 sentences) 2. About Me / Why Choose Me 3. Scope of Work (bullet points) 4. Project Timeline (with milestones) 5. Investment (pricing breakdown) 6. Terms & Next Steps`; const result = await generateAIContent(userPrompt, { system: systemPrompt, maxTokens: 2048 });
AI Invoice Descriptions
When creating invoice line items, use the AI to generate professional descriptions for your services. Click the ✨ AI button next to any line item to get suggestions based on the project context.
const prompt = `Generate a professional invoice line item description for: Service: ${serviceType} Project: ${projectName} Client: ${clientName} Write 1-2 sentences. Be specific and professional. Example: "UI/UX design and prototyping for the mobile checkout flow, including 3 revision rounds and Figma source files."`; const description = await generateAIContent(prompt, { maxTokens: 150 });
Import Data
You can import a previously exported VixFlow JSON backup to restore your data. Go to Settings → Import Data and select your backup file.
The import function validates your JSON file structure before writing to localStorage:
function importData(jsonFile) { const data = JSON.parse(jsonFile); const required = ['version', 'clients', 'proposals', 'invoices']; if (!required.every(k => k in data)) { throw new Error('Invalid VixFlow backup file'); } // Merge each entity type ['clients', 'proposals', 'invoices', 'projects', 'expenses'].forEach(key => { const existing = getEntity(`vixflow_${key}`); const existingIds = new Set(existing.map(e => e.id)); const newItems = data[key].filter(i => !existingIds.has(i.id)); const merged = [...existing, ...newItems]; localStorage.setItem(`vixflow_${key}`, JSON.stringify(merged)); }); toast('Data imported successfully', 'success'); }
Privacy & Security
VixFlow is designed to be privacy-first by architecture. Since there is no server, there is no data breach risk from our side. All the risk management is in your hands.
- API key storage: Your Claude API key is stored in
vixflow_settingsin localStorage. It is sent directly to Anthropic's API — never to any VixFlow server. - No telemetry: VixFlow does not collect analytics, usage data, or error reports.
- No cookies: VixFlow uses localStorage, not cookies. Your data is never transmitted with HTTP requests.
- Client data isolation: All client data stays on the device where it was created. It does not sync to the cloud.
Read our full Privacy Policy for more details.
Export & Backup
Export all your VixFlow data from Settings → Export. This creates a JSON file containing all clients, proposals, invoices, and projects. Keep this file backed up to avoid data loss.