← Home Help & Manual
Introduction

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.

Welcome to LAP
Your LinkedIn posts, formatted and scheduled automatically.
📊
Upload Posts
Upload Excel
Write a Post
AI Writer
📝
Format a Post
AI Formatter
📬
Review & Approve
Review
📅
Schedule
Calendar
⚙️
Settings
Admin

Key capabilities:

AI post generation (Claude) Excel content plan import Writing style profiles Word document formatter Review & approval queue LinkedIn OAuth publishing Multi-user with license keys Token usage tracking
Before you begin

Prerequisites

LAP is a web app — nothing to install. You need the following before you can use it.

RequirementNotesWhere 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
ℹ️
LAP runs on linkedin-article-poster.fly.dev — always on, no server to manage. Your data is stored on a persistent cloud volume and is never deleted.
Getting Started

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.

⚠️
Save your admin license key! It is generated on first startup and retrievable at any time from Settings → My License Key → Reveal. If you haven't set your password yet, see Admin License Keys for recovery options.

Step 3 — Sign in

Use your admin email and the password you set during onboarding. Sessions last 7 days.

The app is always on — no need to start or stop a server. Updates deploy automatically; you never need to manually upgrade.
First-time Setup

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.

1
Go to the onboarding page The wizard opens automatically on first launch, or navigate to onboard.html from within the app.
2
Enter your license key & email Paste the v1.eyJ… admin key (retrieve it from Settings → My License Key if needed). For the email, use admin@lap.local. Click Verify key.
3
Create your password Choose a password of at least 8 characters. Click Create account. This sets your login credentials permanently.
4
Add your Claude API key Paste your Anthropic API key (sk-ant-…). Click Save API key. You can skip this and add it later from Settings.
5
Go to dashboard Click Go to dashboard. You're now logged in as admin.
onboard
Enter license key
You received this key when you purchased LAP.
License key
v1.eyJlbWFpbCI6ImFkbWluQGxhcC5sb2NhbC…
Your email
admin@lap.local
Verify key
🔑
Lost the license key? Log into Settings as admin → My License Key card → click Reveal to see it, or Regenerate Key to create a new one. The old key becomes invalid for new registrations.
Plans & Pricing

Plans & Pricing

LAP is a monthly subscription. Choose the plan that fits your use case and pay securely via Razorpay.

PlanPriceBest forLinkedIn profiles
Solo ₹1,000 / month Individual professionals, coaches, founders 1 (your own)
ℹ️
Agency and team plans are not available for self-sign-up. Contact us if you manage multiple LinkedIn profiles for clients.

What's included in the Solo plan

AI post generation (Claude) Excel content calendar import Post formatter (text & Word doc) Review & approval queue Scheduled auto-publishing to LinkedIn Writing style profiles Prompt templates API usage & cost tracker

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.

UsageApproximate cost
Generating 1 post~₹2–5 (varies by post length)
20 posts / month~₹40–100
Anthropic free tierSufficient 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.

⚠️
There is no automatic recurring billing. You renew manually each month. Mark your calendar or set a reminder before your expiry date.
Getting Started

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

1
Go to the pricing page Visit /pricing.html (linked from the login screen). Choose the Solo plan (₹1,000/month).
2
Enter your email & pay Type the email address you want to use for login, then click Subscribe. The Razorpay checkout opens — complete the payment with any UPI, card, or net banking method.
3
Check your inbox Within a minute of payment you will receive an email with your license key (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

4
Go to the registration page Click the link in the email, or navigate to /onboard.html directly. On the login screen, click Register with license key.
5
Enter your license key & email Paste the v1.eyJ… key from your email, and type the email address you used when paying. Click Verify key.
6
Create your password Choose a password of at least 8 characters and click Create account. This is your permanent login password.
7
Add your Anthropic (Claude) API key Paste your key from 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.
8
Go to the dashboard Click Go to dashboard. You're in and ready to start creating posts.
⚠️
Anthropic API key is required for AI generation. Get a free-tier key at console.anthropic.com → API Keys → Create key. The key is stored securely in your account and is never shared.
You can update your API key later at any time from Settings → AI Settings. No need to re-register.
Getting Started

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.

If you see "Account setup not complete", your registration isn't complete. Follow the Sign Up & Register steps to finish.
ℹ️
Forgot your password? Contact support — your account can be reset so you can re-register with the same license key.
Core workflow

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:

1. Upload Posts 2. Write Post 3. Format Post 4. Review & Approve 5. Schedule
#StepWhat happens
1Upload PostsImport an Excel file of topics into the content calendar database.
2Write a PostPick a topic, generate a draft with AI, or paste one manually.
3Format a PostTransform raw text or a Word doc into a structured LinkedIn post.
4Review & ApproveSee all drafts, edit them, and approve or reject.
5ScheduleAssign publish dates on a calendar; LAP posts to LinkedIn automatically.
Workflow · Step 1

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.

ColumnRequiredDescription
MonthOptionalMonth label, e.g. April. For your own planning reference only.
WeekOptionalWeek label or number, e.g. 1. For your own planning reference only.
Post No *YesA unique identifier for the post, e.g. SE-APR-001. Used to detect duplicates on re-upload.
Topic *YesThe subject of the post. Feeds directly into the AI prompt.
Special InstructionsOptionalAny extra guidance for that specific post, e.g. mention the course launch.
HashtagsOptionalSpace-separated hashtags to append, e.g. #MindcraftEdtech #PACE. Overrides the default set.
Only the first sheet in the workbook is read. Blank rows are skipped automatically.

How to upload

1
Go to Upload PostsClick Upload Posts on the dashboard, or navigate to /calendar.html.
2
Drop or select your fileDrag an .xlsx or .xls file onto the upload zone, or click it to open a file picker.
3
Review the previewLAP shows a summary: total rows, how many are new, and how many are duplicates (skipped).
4
Click ImportTopics are saved to the database and become available in the Write Post step.
calendar
Upload Content Calendar
📊
Drop your Excel file here
.xlsx or .xls · First sheet only
content_plan_Q2.xlsx
24
Total rows
22
New
2
Skipped
Import 22 topics
⚠️
Re-uploading the same file will skip duplicate Post No values. Existing topics in the database are never overwritten — only new rows are added.
Workflow · Step 2

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 — fills topic fields, uses Claude to write the post Manual — paste or type your own text directly

AI Generate — step by step

1
Select a topicUse the dropdown or search box to pick a pending topic from your content calendar. The Topic, Week, Post No, and Special Instructions fields are auto-filled.
2
Choose a writing styleThe style bar shows all saved writing style profiles. Click one to activate it. The active style shapes the AI output's tone and structure.
3
Select a prompt templateChips below the fields let you pick a specialised prompt (e.g. Story-led, Data-driven, How-to). The starred one is the master template.
4
Click GenerateClaude writes a LinkedIn post. A character counter shows if the post is within LinkedIn's limit (green = fine, amber = getting long, red = over).
5
Edit the outputThe generated text is fully editable. Refine it as needed directly in the output box.
6
Save the postClick Save Post. The post moves to the Review queue with status staged. If the topic was picked from the calendar, it is automatically marked as written.
writer
1. Upload Posts 2. Write Post 3. Format Post 4. Review 5. Schedule
AI Generate
Manual
Topic
Why LinkedIn thought leadership matters for B2B sales
Writing Style
Mindcraft Edtech Voice Professional Casual
Prompt Template
Master ★ Story-led Data-driven How-to
Generate
Save Post
Generated Post
1,847 chars ✓
Every B2B deal starts with trust — and trust starts with visibility… Your buyers are on LinkedIn before they ever fill out a form. They're reading your posts, checking your activity, forming an opinion before the first call… The question isn't whether thought leadership works. It's whether you're showing up consistently enough to matter.

Managing Writing Styles

Click Manage styles (link in the style bar) to open the styles modal. You can:

Add a new style (name + description) Set a style as Active (used by default) Edit or delete existing styles

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.

Workflow · Step 3

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:

TabHow 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:

OptionDescription
ToneProfessional, Conversational, Inspirational, or Educational.
LengthShort (~500 chars), Medium (~1200 chars), Long (~2000 chars).
Emoji levelNone · Minimal · Moderate · Rich. Controls how many emojis are inserted.
Add hashtagsToggle on to auto-append relevant hashtags.
Add hookRewrites the first line into a scroll-stopping opening line.
Add CTAAppends a call-to-action to the end.
formatter
Paste Text
Upload Word Doc
LinkedIn is where decisions get made before the meeting even happens. I've been saying this for years and the data keeps backing me up…
Tone
Professional
Length
Medium
None Minimal Moderate Rich
Format Post
Formatted Result
LinkedIn is where decisions get made — before the meeting even happens. I've been saying this for years. And the data keeps proving it. 🔍 Your buyers check your profile before replying to your DM. 📊 Consistent thought leadership increases inbound enquiries by 3×. 💬 Your posts are your first conversation with every new connection. The question is: are you showing up, or leaving that space empty? #LinkedInMarketing #B2BMarketing #ThoughtLeadership #MindcraftEdtech
Copy
Save Post
After formatting, click Save Post to push the result into the Review queue, just like a written post. You can then approve and schedule it.
Workflow · Step 4

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

staged — freshly generated, awaiting review approved — ready to schedule rejected — needs rework scheduled — assigned a publish date published — posted to LinkedIn

How to review a post

1
Filter by statusUse the filter pills (All / Staged / Approved / Rejected / Scheduled / Published) to narrow the list.
2
Click a post to expand itThe full text is shown in an editable box. Make any inline edits you want.
3
Approve or RejectClick Approve to move it to the scheduling queue. Click Reject to flag it for rewriting. Rejected posts stay in the list; you can re-approve after editing.
4
Assign a schedule date (optional)You can set a target publish date directly from the Review page before going to Schedule.
review
All Staged Approved Rejected Scheduled Published
LinkedIn is where decisions get made before the meeting…
staged 15 Apr 2026
LinkedIn is where decisions get made — before the meeting even happens…
Approve
Reject
Workflow · Step 5

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

1
Navigate monthsUse the ← → arrows to move between months. Click Today to jump to the current month.
2
Click an approved post's date chipEach approved post appears as a chip on its scheduled date. Click the chip to see details, change the date, or mark it published.
3
Post to LinkedInIf your LinkedIn account is connected, a Post Now button appears on the detail card. LAP sends the post via the LinkedIn API and logs the post URL.
schedule
April 2026
Mon
Tue
Wed
Thu
Fri
Sat
Sun
1
2
P01 · B2B Trust
3
4
5
6
7
8
9
P02 · Published ✓
10
11
12
13
15
P03 · LinkedIn TL
ℹ️
LAP checks for due posts every minute and publishes them automatically. On the cloud-hosted version (linkedin-article-poster.fly.dev) the server runs 24/7, so scheduled posts publish reliably. Posts scheduled in the past can also be triggered manually with Post Now.
Integration

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

1
Go to developer.linkedin.comSign in with your LinkedIn account and click Create App.
2
Fill in app detailsName: anything (e.g. LAP Local). LinkedIn Page: your company page. Logo: any image.
3
Add the redirect URLIn the app's Auth tab, add as an Authorised Redirect URL.
4
Add required productsUnder Products, request access to Share on LinkedIn and Sign In with LinkedIn using OpenID Connect.
5
Copy Client ID and Client SecretFrom the Auth tab. You'll paste these into LAP Settings.

2 — Add credentials to LAP Settings

Go to SettingsLinkedIn 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.

linkedin-auth
Connected
Rakes Kumar · Expires 14 Oct 2026
Reconnect LinkedIn
⚠️
LinkedIn access tokens expire after ~60 days. When your token expires, return to Connect LinkedIn and click Reconnect to re-authorise.
Maintenance

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

Posts — all posts, filterable by status Orphaned — posts whose calendar topic was deleted

Actions

ActionWhat it does
View / ExpandClick any row to see the full post text and metadata.
DeletePermanently removes the post from the database. Cannot be undone. A confirmation prompt appears first.
Filter by statusUse the status chips (All / Staged / Approved / etc.) to narrow the list.
⚠️
Deletion is permanent. There is no recycle bin. Use the Manage Posts page for housekeeping only.
Configuration

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.

🔒
The following sections are visible only when logged in as admin.

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).

Admin

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

1
Go to SettingsOpen /admin.html while logged in as admin.
2
Fill in the Generate License Key formEnter the user's email, select their tier, and set an expiry date (default is 1 year from today).
3
Click Generate KeyThe key appears in a code box below the form. Click Copy key to copy it.
4
Send the key to the userShare it via email or chat. They open LAP on their machine, navigate to onboard.html, and complete onboarding with the key.
admin — Generate License Key
Generate License Key
Client Email
user@company.com
Tier
Agency
Expiry Date
2027-04-15
Generate Key
License Key
v1.eyJlbWFpbCI6InVzZXJAY29tcGFueS5jb20iLCJ0aWVyIjoiYWdlbmN5IiwiZXhwIjoiMjAyNy0wNC0xNSIsImlzcyI6IkxBUCJ9.xK9mP2…
Copy key

Tier differences

TierIntended for
SoloSingle user managing their own LinkedIn profile.
TeamSmall team sharing a single LAP instance.
AgencyAgency managing multiple clients. Full feature access.
Admin

User Management

The Users table in Settings gives the admin full visibility and control over every account on the instance.

ColumnMeaning
EmailThe user's login email.
Roleadmin or user
TierSolo / Team / Agency — set at registration from the license key.
License ExpiryWhen the user's license key expires. After expiry, login is blocked.
Last LoginTimestamp of the most recent successful sign-in.
StatusActive (green dot) or Disabled (amber dot). Disabled users cannot log in.

Disabling vs Deleting a user

⚠️
Disable — blocks login but keeps all data. Reversible.
Delete — permanently removes the user and all their posts, settings, styles, and calendar entries. Cannot be undone.
Help

Troubleshooting & FAQ

Common problems and how to fix them.

What happens when my subscription expires?
When your license key expires, login is blocked. Your data (posts, calendar, styles) is preserved — it is not deleted.

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.
I can't log in — "Account setup not complete"
Your account exists but you haven't set a password yet. Click Register with license key on the login screen, enter the license key your admin sent you and your email address, then create a password. After that, login will work normally.
I forgot my password
There is no self-service password reset. Contact support — your account can be reset so you can re-register using your existing license key and a new password.
Where do I get a Claude (Anthropic) API key?
1. Go to console.anthropic.com and sign up (free).
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.
The Generate button does nothing / posts aren't being created
The Claude AI key is either missing or has run out of credit.

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.
Excel upload — 0 rows imported
Check your spreadsheet has the required column headers on Sheet 1: Post No and Topic (case-insensitive). Make sure there are no leading/trailing spaces in the header names and the data starts on the first sheet.
LinkedIn connection shows "Expired" or won't connect
LinkedIn access tokens expire after approximately 60 days.

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.
My post was approved but it didn't publish on schedule
Check two things:

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.
How do I change my password?
Go to Settings (top-right of any screen) → Change Password. Enter your current password, your new password twice, and click Update Password. Minimum 8 characters.
Can I use the app on a different computer?
Yes — LAP is a web app. Open linkedin-article-poster.fly.dev in any browser on any device and sign in with your credentials. No installation needed on any device.
Help

Troubleshooting & FAQ

Common problems and how to fix them.

I can't log in — I haven't set my admin password yet. How do I get the license key?
If you are already logged in as admin, go to Settings → My License Key → Reveal.

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.
The Generate button does nothing / Claude returns an error
The Claude API key is missing or invalid.

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.
LinkedIn OAuth fails / "redirect_uri_mismatch"
The redirect URL in your LinkedIn Developer App must exactly match:


Go to your LinkedIn app → Auth tab → Authorised Redirect URLs → confirm that exact URL is listed. No trailing slashes.
Excel import says 0 rows imported
Required columns: Post No and Topic (case-insensitive) on Sheet 1. Check for leading/trailing spaces in header names.
A user says they can't log in — "Account setup not complete"
Their account was created but they haven't registered yet. Send them their license key and direct them to the Register with license key link on the login screen.
Where is the data stored? How do I back up?
Cloud-hosted (fly.dev): Data lives on a persistent Fly.io volume at /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.sql

To restore from a dump: flyctl ssh console --app linkedin-article-poster -C "sqlite3 /data/lap.db" < backup.sql
How do updates work? Do I need to do anything?
Nothing. LAP is a web app — updates deploy automatically to Fly.io. The next time you open your browser after an update, you're already on the latest version. Your data is never affected by updates.