What is LAP?
LinkedIn Article Poster (LAP) is a cloud-hosted web app by Mindcraft Edtech that helps you plan, write, format, review, and publish LinkedIn posts — accessible from any browser, no installation required. AI generation is powered by the Anthropic API using your own key.
Key capabilities:
Prerequisites
LAP is a web app — nothing to install. You need the following before you can use it.
| Requirement | Notes | Where to get it |
|---|---|---|
| A modern web browser | Chrome, Edge, Firefox, Safari | Already on your device |
| Anthropic API key | Required for AI post generation | console.anthropic.com → API Keys |
| LinkedIn Developer App (optional) | Only needed for auto-publishing to LinkedIn | developer.linkedin.com |
Accessing LAP
LAP is a web app — no download, no installation. Open your browser and go.
Step 1 — Open the app
Navigate to https://linkedin-article-poster.fly.dev in any modern browser. Bookmark it for quick access.
Step 2 — Complete onboarding
On your first visit, go to /onboard.html to set your admin password and save your Claude API key. You will be redirected to the login page when done.
Step 3 — Sign in
Use your admin email and the password you set during onboarding. Sessions last 7 days.
Admin Onboarding
Before you can log in, you must complete the 4-step onboarding wizard at /onboard.html.
This sets your password and connects the Claude AI key.
onboard.html from within the app.
v1.eyJ… admin key (retrieve it from Settings → My License Key if needed). For the email, use admin@lap.local. Click Verify key.
sk-ant-…). Click Save API key. You can skip this and add it later from Settings.
Plans & Pricing
LAP is a monthly subscription. Choose the plan that fits your use case and pay securely via Razorpay.
| Plan | Price | Best for | LinkedIn profiles |
|---|---|---|---|
| Solo | ₹1,000 / month | Individual professionals, coaches, founders | 1 (your own) |
What's included in the Solo plan
Additional cost — Anthropic API
LAP uses Claude by Anthropic to generate and format posts. This is billed separately and directly by Anthropic — it is not included in the LAP subscription. You bring your own API key.
| Usage | Approximate cost |
|---|---|
| Generating 1 post | ~₹2–5 (varies by post length) |
| 20 posts / month | ~₹40–100 |
| Anthropic free tier | Sufficient for light usage; upgrade as needed |
Get your key at console.anthropic.com. Sign up is free and includes starter credits.
Renewal & cancellation
Each payment covers one month of access from the date of purchase. Your license key encodes an expiry date — when it expires, you will not be able to log in. To renew, purchase again on the pricing page; a new license key will be emailed to you.
Sign Up & Register
LAP is a subscription service. New users subscribe on the pricing page, receive a license key by email, and complete a one-time registration to activate their account.
Step 1 — Subscribe
/pricing.html (linked from the login screen). Choose the Solo plan (₹1,000/month).
v1.eyJ…). Keep it safe — you'll need it to register and again if you ever log in from a new device.
Step 2 — Register your account
/onboard.html directly. On the login screen, click Register with license key.
v1.eyJ… key from your email, and type the email address you used when paying. Click Verify key.
console.anthropic.com (starts with sk-ant-) and click Save API key. This is required to generate posts. Without it the AI Writer will not work.
console.anthropic.com → API Keys → Create key. The key is stored securely in your account and is never shared.
Signing In
Once registered, signing in is straightforward.
Not registered yet? See Sign Up & Register first.
Returning logins
Go to linkedin-article-poster.fly.dev → enter your email and password → click Sign in. Sessions last 7 days before you need to sign in again.
The 5-Step Workflow
Every post in LAP follows a linear pipeline. Each step feeds into the next. You can jump directly to any step, but the natural order is:
| # | Step | What happens |
|---|---|---|
| 1 | Upload Posts | Import an Excel file of topics into the content calendar database. |
| 2 | Write a Post | Pick a topic, generate a draft with AI, or paste one manually. |
| 3 | Format a Post | Transform raw text or a Word doc into a structured LinkedIn post. |
| 4 | Review & Approve | See all drafts, edit them, and approve or reject. |
| 5 | Schedule | Assign publish dates on a calendar; LAP posts to LinkedIn automatically. |
Upload Posts
The content calendar is your topic database. Before writing posts, you upload an Excel file that defines the topics, weeks, and special instructions for every planned post.
Excel file format
The spreadsheet must contain these columns (exact header names, case-insensitive). Columns marked * are required; the rest are optional.
| Column | Required | Description |
|---|---|---|
Month | Optional | Month label, e.g. April. For your own planning reference only. |
Week | Optional | Week label or number, e.g. 1. For your own planning reference only. |
Post No * | Yes | A unique identifier for the post, e.g. SE-APR-001. Used to detect duplicates on re-upload. |
Topic * | Yes | The subject of the post. Feeds directly into the AI prompt. |
Special Instructions | Optional | Any extra guidance for that specific post, e.g. mention the course launch. |
Hashtags | Optional | Space-separated hashtags to append, e.g. #MindcraftEdtech #PACE. Overrides the default set. |
How to upload
/calendar.html..xlsx or .xls file onto the upload zone, or click it to open a file picker.Write a Post
The Write page is your AI drafting workspace. Choose a topic from the content calendar, pick a writing style, and generate a LinkedIn post in your brand voice — or write one entirely manually.
AI mode vs Manual mode
The page has a mode toggle at the top:
AI Generate — step by step
Managing Writing Styles
Click Manage styles (link in the style bar) to open the styles modal. You can:
Each style's description is injected into the AI prompt to shape tone and vocabulary. Be specific — e.g. "Authoritative but warm. Short punchy sentences. No jargon."
Managing Prompt Templates
Templates define the structural format of the AI-generated post. The Master template ★ is the default; others let you override the format for specific post types. You can edit templates from Settings → Prompt Templates, or directly via the chip panel using the edit icon.
Format a Post
The Formatter takes raw text — pasted directly or extracted from a Word document — and transforms it into a LinkedIn-ready post with emojis, hashtags, proper line spacing, and structure.
Input methods
Switch between two input tabs:
| Tab | How to use |
|---|---|
| Paste Text | Type or paste plain text into the textarea. Click Format Post. |
| Upload Word Doc | Drag a .docx file onto the drop zone (or click to browse). Text is extracted automatically. Then click Format Post. |
Formatting options
Before clicking Format, customise the output using the options panel:
| Option | Description |
|---|---|
| Tone | Professional, Conversational, Inspirational, or Educational. |
| Length | Short (~500 chars), Medium (~1200 chars), Long (~2000 chars). |
| Emoji level | None · Minimal · Moderate · Rich. Controls how many emojis are inserted. |
| Add hashtags | Toggle on to auto-append relevant hashtags. |
| Add hook | Rewrites the first line into a scroll-stopping opening line. |
| Add CTA | Appends a call-to-action to the end. |
Review & Approve
The Review page is your editorial inbox. Every post generated or formatted in LAP lands here as a staged draft. You review, edit if needed, and either approve or reject.
Post statuses
How to review a post
Schedule
The Schedule page is a monthly calendar view of all your posts. Approved posts can be dragged onto dates, or a publish date can be assigned directly. When the scheduled time arrives, LAP publishes the post to LinkedIn automatically.
Using the calendar
Connect LinkedIn
Connecting LinkedIn allows LAP to publish posts on your behalf via OAuth. This is optional — you can always copy posts manually — but required for the Post Now and scheduled auto-publish features.
1 — Create a LinkedIn Developer App
as an Authorised Redirect URL.2 — Add credentials to LAP Settings
Go to Settings → LinkedIn App section. Paste your Client ID and Client Secret. Click Save LinkedIn Credentials.
3 — Authorise the connection
Go to Connect LinkedIn on the dashboard (or linkedin-auth.html). Click the blue Connect with LinkedIn button. LinkedIn opens in your default browser — approve the connection there. The app detects the approval automatically and the status banner updates to Connected with your name and token expiry.
Manage Posts
The Manage page gives you a complete, filterable view of every post in the database — including orphaned posts (posts with no matching content calendar topic). Use it for bulk inspection and permanent deletion.
Views
Actions
| Action | What it does |
|---|---|
| View / Expand | Click any row to see the full post text and metadata. |
| Delete | Permanently removes the post from the database. Cannot be undone. A confirmation prompt appears first. |
| Filter by status | Use the status chips (All / Staged / Approved / etc.) to narrow the list. |
Settings
The Settings page (/admin.html) contains all configuration options. Some sections are visible to all users; others are admin-only.
Change Password
Enter your current password, then your new password (minimum 8 characters) twice. Click Update Password.
Claude AI Key
Paste your Anthropic API key (sk-ant-…). Click Save Key. The key is stored encrypted in the local SQLite database and never exposed in the UI after saving (you'll see a masked placeholder instead).
API Usage & Cost
Displays a live log of every Claude API call made through LAP: timestamp, operation (generate / format), model, token counts, USD cost, and INR equivalent. Click Clear Log to reset the counter.
LinkedIn App Credentials
Paste the Client ID and Client Secret from your LinkedIn Developer App. Click Save LinkedIn Credentials. These are required before the OAuth connection flow will work.
My License Key
Shows the admin's own onboarding license key. The key is blurred by default — click Reveal to read it, or Copy to copy it to clipboard. Use Regenerate Key if the key is lost or compromised. The old key becomes invalid for new registrations immediately.
Generate License Key
Creates a signed license key for a new user. Fill in their email, tier (Solo / Team / Agency), and expiry date. Click Generate Key, then copy and send the key to the user. They use it at /onboard.html to register.
Users
Lists all registered accounts with email, role, tier, license expiry, last login, and active status. You can Disable / Enable any user account, or Delete a user (removes all their posts and data permanently).
License Keys
LAP uses signed license keys to control who can register. Each key encodes an email address, tier, and expiry date. Only the admin can generate keys.
How keys work
A license key looks like: v1.eyJlbWFpbCI6…<payload>.<hmac_signature>
The payload is a Base64url-encoded JSON containing email, tier, and exp (expiry). The HMAC signature is computed using a server-side secret, so keys cannot be forged. Expiry is validated on every registration attempt.
Generating a key for a new user
/admin.html while logged in as admin.onboard.html, and complete onboarding with the key.Tier differences
| Tier | Intended for |
|---|---|
| Solo | Single user managing their own LinkedIn profile. |
| Team | Small team sharing a single LAP instance. |
| Agency | Agency managing multiple clients. Full feature access. |
User Management
The Users table in Settings gives the admin full visibility and control over every account on the instance.
| Column | Meaning |
|---|---|
| The user's login email. | |
| Role | admin or user |
| Tier | Solo / Team / Agency — set at registration from the license key. |
| License Expiry | When the user's license key expires. After expiry, login is blocked. |
| Last Login | Timestamp of the most recent successful sign-in. |
| Status | Active (green dot) or Disabled (amber dot). Disabled users cannot log in. |
Disabling vs Deleting a user
Delete — permanently removes the user and all their posts, settings, styles, and calendar entries. Cannot be undone.
Troubleshooting & FAQ
Common problems and how to fix them.
To renew: visit
/pricing.html, purchase again with the same email address, then complete registration at /onboard.html with your new license key. Your existing data will be waiting.
2. Click API Keys in the sidebar → Create key.
3. Copy the key (starts with
sk-ant-).4. In LAP, go to Settings → AI Settings, paste the key, and click Save Key.
Anthropic offers free-tier credits when you sign up. You will be billed only if you exceed the free quota — typical monthly usage is well within the free limit.
1. Go to Settings → AI Settings.
2. Paste a valid Anthropic API key (starts with
sk-ant-) and click Save Key.3. If you don't have a key, get one at console.anthropic.com — a free tier is available.
4. If the key is already saved, it may have expired or been revoked. Try saving a fresh one.
Go to Connect LinkedIn from the dashboard and click Connect with LinkedIn (or Reconnect). You'll be taken to LinkedIn to re-approve the connection, then returned to the app. The status will show Connected once successful.
1. LinkedIn connection — go to Connect LinkedIn and confirm your token hasn't expired (tokens last ~60 days). If it shows Expired, click Reconnect.
2. Server running — the server on fly.dev is always on, so this should never be the cause.
To publish it now regardless: go to Schedule, click the post on the calendar, and click Post Now.
linkedin-article-poster.fly.dev in any browser on any device and sign in with your credentials. No installation needed on any device.
Troubleshooting & FAQ
Common problems and how to fix them.
If you haven't set your password yet and can't log in, retrieve the key via SSH:
flyctl ssh console --app linkedin-article-poster -C "node -e \"const {getUserByEmail}=require('./db'); console.log(getUserByEmail('admin@lap.local').license_key)\""Then go to
/onboard.html, paste the key with email admin@lap.local, and complete registration.
1. Go to Settings → AI Settings → paste a valid
sk-ant-… key → Save.2. Verify the key hasn't been revoked at
console.anthropic.com.3. Check your Anthropic account has active credit.
Go to your LinkedIn app → Auth tab → Authorised Redirect URLs → confirm that exact URL is listed. No trailing slashes.
Post No and Topic (case-insensitive) on Sheet 1. Check for leading/trailing spaces in header names.
/data/lap.db inside the VM. To back up, SSH into the machine and copy the file: flyctl ssh console -C "sqlite3 /data/lap.db .dump" > backup.sqlTo restore from a dump:
flyctl ssh console --app linkedin-article-poster -C "sqlite3 /data/lap.db" < backup.sql