Domains

{{ projects.length }}/{{ projectCap }} used on your {{ planLabel }} plan

Current

{{ p.url || 'No URL set' }}

Preparing brand kit…

Your plan includes {{ projectCap }} domain{{ projectCap === 1 ? '' : 's' }} — upgrade for more.

Set a new password

Choose a new password for your account.

{{ (newPassword.length > 0 && newPassword.length < 6) ? ('Too short — at least 6 characters (' + newPassword.length + '/6).') : 'At least 6 characters.' }}

{{ auth.error }}

{{ auth.notice }}

{{ auth.mode==='password' && auth.intent==='signin' ? 'Welcome back' : 'Create your account' }}

Your build-in-public sidekick.

{{ (auth.password.length > 0 && auth.password.length < 6) ? ('Too short — at least 6 characters (' + auth.password.length + '/6).') : 'At least 6 characters.' }}

Enter your email and we'll send a link to set a new password.

{{ auth.error }}

{{ auth.notice }}

FoxPlug

{{ projects.length }}/{{ projectCap }}
Voice:
Launch stage:
Approval mode: {{ settings.approval_mode === 'autopilot' ? 'Autopilot' : 'Approval required' }}

{{ banner }}

You're on {{ planLabel }} — nice. 🎉

A few things worth setting up now to get the most out of it:

  • 1. Run another product from the same place — your {{ planLabel }} plan includes {{ projectCap }} project{{ projectCap === 1 ? '' : 's' }}.
  • {{ atProjectCap ? '1' : '2' }}. Set up your passive, easy pipelines to massive exposure. Read more
  • {{ atProjectCap ? '2' : '3' }}. Set up your Walkthrough CTA end screen in Settings — it's per project, so each product gets its own call-to-action.

You came to make a promo video — let's set it up. Connect your project and every update you ship becomes ready-to-post content: branded image cards and platform-tailored text now, with narrated videos and GIFs rolling out to you first.

What are you building in?

Pick where you write your code. FoxPlug works with all of them — your code already lives on GitHub, and we turn every push into your story.

{{ buildToolBridgeLine }}

Read-only access to your code. Your access is encrypted at rest — we never store it in plain text and never write to your repos.

What do you build with?

Optional — it helps us decide what to integrate next.

Or set up by pasting your product address instead

No GitHub yet? You can paste your product address and we'll read your page to fill in the rest — then connect your code any time in Settings.

Let's get FoxPlug telling your story

{{ WIZARD_STEPS[wizardStep - 1].blurb }}

Step {{ wizardStep }}/4

Paste your product URL

We'll read your page and fill in the rest — name, one-liner, logo and brand colour. Everything stays editable, and you can skip straight to typing it yourself.

{{ wizardDetectNote }}

Prefilled from your page Review and edit anything below.
Detected logo {{ wizard.logo_url ? 'Logo' : '' }}{{ wizard.logo_url && wizard.brand_color ? ' + ' : '' }}{{ wizard.brand_color ? ('brand colour ' + wizard.brand_color) : '' }} detected.

Looks like you publish on {{ platformLabel(wizard.blog_platform) }}. We've preselected {{ destinationLabel(wizard.publish_destination) }} as your publish destination — change it any time in Drafts. We'll remember this as a hint for where to publish.

  • “{{ ex }}”

Pulling your brand…

Got your logo and colors ✓

Where do you post?

Add the places you share updates and we'll pre-fill your promos later. Optional — skip any you don't use.

Your promo power

{{ completenessMeter.pct }}%

The more you connect, the more we can make for you. This never affects your free launch video.

{{ u.done ? '✓' : '○' }} {{ u.label }} {{ u.need }} Unlocked

What's your stack?

Pick the tools you build with. We'll only show you the connectors that matter — and use the rest to decide what to build next.

Connect one to begin

Connect a tool and we'll pull your real work in and write the first post on it. You can do this in Settings any time too.

{{ t.name }} Connected ✓

{{ t.scopeHint }}

Coming soon for your stack — we know you want these

{{ t.name }} · soon

No tools picked. You can connect a tool in Settings whenever you're ready — or skip ahead and see a sample.

Already have a changelog? We'll pull it in.

Paste your changelog or blog address. We fetch your past entries and add them as history, so your first posts already know your story. WordPress: add /feed. Ghost: add /rss. Substack: add /feed. Not sure? Just paste the page address.

{{ changelogImportResult.text }}

How this works

We find your project's advancements and make posts, videos, and images for you to share. Nothing ever goes out without your approval.

Choose your voice

By default your posts read “I just released the…”. Switch to “we” if you'd rather they sound like something your team accomplished.

✨ {{ unreviewedDraftCount }} post{{ unreviewedDraftCount === 1 ? '' : 's' }} ready for you to review

We turned your work into posts. Nothing publishes until you approve.

Get the most out of FoxPlug

Let us turn your breakthroughs into visual updates — images, GIFs, even promo clips. Add Pinterest, TikTok, or Instagram (personal or business) in Settings so we know where to make them for.

Get your first post out

Four steps from here to a published update. Each ticks off on its own as you go.

{{ obDoneCount }}/4
  1. {{ s.n }} {{ s.label }}

All four done — you're shipping.

Setup {{ obDoneCount }}/4 · next: {{ (onboardingSteps.find(s => !s.done) || {}).label }} · all done

Quick — what's your product called?

We'll use this in your posts so the first draft sounds like your product, not your repo.

{{ studioSignals.stale }} ready

Going Stale

Unshared wins about to age out — share before they're old news.

{{ studioSignals.short }} ready

Short Form

One update → a post or thread. Pick a format, generate, edit & post.

Broadcast

Review & publish your posts across every channel.

Milestones

Your big shipped moments — prep & share far and wide.

Library

Saved assets & aged-out wins to repurpose.

{{ studioSignals.video }} ready

Video Studio

Promo + launch films, every ratio.

{{ studioSignals.image }} ready

Image Studio

Shareable images from a win or a Library image.

{{ studioSignals.gif }} ready

GIF Studio

Looping GIFs from images or a video's ending.

{{ studioSignals.sticker }} ready

Sticker Studio

Transparent stickers for Giphy, iMessage, Slack.

{{ studioSignals.long }} ready

Docs Studio

Long-form write-ups & docs — coming soon.

{{ currentShareView.title }}

{{ currentShareView.tip }}

{{ itemBig(m) ? 'Big' : 'Small' }} {{ itemAgeDays(m) === 0 ? 'today' : itemAgeDays(m) + 'd old' }} {{ itemArchiveDays(m) }}d to archive Shared ×{{ m.share_count }}

{{ milestoneHeadline(m) }}

{{ m.why_it_matters || m.description }}

{{ marketingScore(m).score }} {{ marketingScore(m).verdict }}
{{ r }}

▶ Video ready — open page · also in your Studio

Still rendering — it'll appear in your Studio shortly.

{{ visualMsg[m.id] }}

Text

Visual

Threads

Got it — we'll show fewer like this.

Today

{{ todaySummary }}

Your next moves for {{ (activeProject && activeProject.name) || 'this project' }}.

What did you move forward today?

🔥 {{ progressStreak }}-day building streak
🧭 Coach

{{ coach.insight }}

Reach

Your GIFs and stickers are out in the world. Views land here as people pick them up.

Your reach numbers will appear here.

Your build log

🔥 {{ progressStreak }}-day building streak · {{ progressDaysThisMonth }} {{ progressDaysThisMonth === 1 ? 'day' : 'days' }} you moved something real forward this month

Your build log starts with today

What did you move forward?

{{ g.label }}

  • · {{ it.summary }}

You're caught up 🎉

Ship something and it'll show up here, ready to share.

Review new ships {{ todayReview.length }}

We turned your work into posts — give them a quick look and approve.

Ready to post {{ todayReady.length }}

Approved and waiting — open the Post Kit and send each in one tap.

Make a visual {{ todayMakeVisual.length }}

Big ships that deserve an image or GIF.

{{ milestoneHeadline(m) }}

Share to your channels

Push a recent ship into your connected chat.

{{ milestoneHeadline(m) }}
{{ shipPostMsg[m.id] }}

Finish setting up distribution {{ distributionRemaining }} left

More doors = more reach: {{ i ? ', ' : '' }}{{ d.label }}.

Captures

Moments from your work that may be worth sharing.

You're connected — nothing new to share since we last checked your work.

You're connected — pull your work in to get started.

As soon as you ship something new, it shows up here on its own. You don't have to do anything.

A tool is connected. Open Settings and click Pull in latest to bring your recent work in.

Nothing here yet

Captures are the moments from your work that may be worth sharing — pulled in from the tools you build with, or added by hand. Connect a tool in Settings to fill this in.

{{ c.raw_text }}

{{ humanize(c.source) }} · {{ fmt(c.captured_at) }}

{{ c.processed ? 'Used' : 'Waiting' }}

Milestones

Captures rolled up into stories worth telling. Turn one into a short post, or group several into a long-form story.

No milestones in {{ (activeProject && activeProject.name) || 'this project' }} yet

Milestones are your captures grouped into stories worth telling. They appear on their own as new work comes in — we check every 15 minutes. Connect a tool or add a capture to get the first one.

Ready to share on your visual platforms
Add a visual platform Save image

Distribute this ship — {{ milestoneHeadline(m) }}

{{ a.label }} ({{ a.handle }})

{{ platformCaption(m, a.key) }}

Finding hashtags…
{{ tag }}

Your channels

{{ shipPostMsg[m.id] }}
Connect Discord/Slack first →

Get discovered on Giphy

Writing your title, tags and description…

Add a little more detail to this milestone and .

What people type into the GIF box in Slack, Discord, Facebook — not hashtags.

{{ tag }}

Paste this as the GIF's source link so every use sends people to your site.

Download your GIF, open an uploader, and paste the title, tags, and source link.

Writing your Short title, description and tags…

Add a little more detail to this milestone and .

YouTube Short

Upload the GIF, paste your Source URL, and add these tags — that's how it gets found on Giphy and carries your link.

1. Create an account at https://giphy.com/join ↗ (use your work email/domain if you can).

2. Add your logo, a short bio, and your website.

3. Upload 5 GIFs first — Giphy wants to see real content before approving.

4. Apply for a Brand Channel: https://support.giphy.com/hc/en-us/articles/360019977992-Apply-For-A-Brand-Channel ↗

5. Approval takes a few days (sometimes up to two weeks). Until approved, your GIFs won't appear in anyone's GIF picker.

6. Per GIF: paste the title, up to 20 tags (we provide them), and your website as the Source URL. New uploads can take up to 24h to show in search.

Specs we already match: loops, under 15s, under 8MB, 480p. (Stickers need a transparent background — coming soon.)

Writing venue-tailored posts…

Couldn't write the posts — add a little more detail and .

Open ↗

{{ milestoneHeadline(m) }}

{{ milestoneSubtitle(m) }}

{{ m.title }}

{{ m.description }}

Call: {{ milestoneCall(m).label }} your call provisional Re-routing…

{{ m.why_it_matters }}

Not worth a post on its own — bump it up if it actually matters.

{{ m.format_verdict === 'do_not_post' ? formatVerdictLabel(m.format_verdict) : 'Best shown as: ' + formatVerdictLabel(m.format_verdict) }}

✍️ This looks significant — want a long-form write-up too?

Here's what I could write:

{{ longFormSuggestion(m).title }}

  • {{ b }}

Primed ✓ — open your product and click your Record bookmarklet to start (titled “{{ walkthroughPrime.title || 'your walkthrough' }}”).

🎬 You shipped something — make a walkthrough of it?

Upgrade for more walkthroughs

📎 Lands better with a screenshot or metric — attach one

No assets in this project yet — use “Upload new”, or add some in Settings → Assets.

Attached proof

Image attached — this post is image-primary.

Not a visual moment — visuals land for launches, big milestones, striking numbers, or a new look, not routine ships and fixes.

Send to chat

{{ shipPostMsg[m.id] }}

Drafts

One click sends you straight to X or LinkedIn with your post ready to go. Connected channels can post on their own. Nothing ever goes out until you click.

Make a video for any site

Paste a company's web address and we'll make a short, branded teaser about them — a warm way to open outreach. You get a link to send that plays with their own call-to-action.

{{ prospectAd.error }}

{{ prospectAd.message || ('Tell us what ' + (prospectAd.name || 'they') + ' does and we’ll make the video.') }}

Making your video{{ prospectAd.name ? (' for ' + prospectAd.name) : '' }}…

This takes a moment — it'll appear right here when it's ready. No need to wait around.

Ready to send{{ prospectAd.name ? (' — ' + prospectAd.name) : '' }}

Open page

Your prospect videos

{{ videoTitle(v) }}

{{ videoDate(v) }}

Open page Share to X Share to LinkedIn Download

{{ generatedNotice }}

It's highlighted below. Review it, then click Looks good to choose where it goes — nothing is posted until you do.

No drafts in {{ (activeProject && activeProject.name) || 'this project' }} yet

Drafts are ready-to-post updates written from your milestones. Open a milestone and generate a post, then approve it here and publish.

Milestone

{{ groupHeadline(g) }}

{{ groupCountLabel(g) }}

{{ g.drafts.length }} platform{{ g.drafts.length === 1 ? '' : 's' }}

Text

Visual

Threads

Page {{ draftPage + 1 }} / {{ draftGroupPageCount }}

We watched you ship and wrote your posts.

Review, tweak, post — from your own profile, one click each.

This week's progress ({{ weekMilestones.length }} milestone{{ weekMilestones.length === 1 ? '' : 's' }})

  • {{ milestoneHeadline(m) }}

No milestones in the last 7 days yet — connect a tool to start.

Latest digest score: {{ latestDigest.score }} · {{ digestTrend() }}

Per-platform posts are a Pro feature

Free includes the weekly digest above. Pro turns every milestone into ready-to-post LinkedIn, X, and blog drafts with one-click self-posting.

See Pro

Brand Kit {{ (activeProject && activeProject.name) || 'This project' }}

Your logo, colours, fonts and voice — used across every video for this project. Switch the active project at the top to set up another.

Loading…
Set up your brand kit — pull from your domain or upload your logo below, then pick a voice. It's used across every video for this project.

Pull from my domain

We fetch your logo and pull a colour palette from it automatically. Anything you've set by hand is left untouched.

Logo

Upload a light-background and a dark-background version. We pull your colours from the light one.

Light logo No light logo yet
Dark logo No dark logo yet

Company colours

Auto-filled from your logo — tweak any swatch. Used for captions, callouts and the endcard.

{{ sw.role }}

Ad palette

A separate palette just for ads — starts from your company colours, change any swatch to make ads pop without touching your brand kit.

{{ sw.role }}

Fonts

A display font for headlines and a body font for everything else.

{{ brandKitMsg }}

Make an Ad

A short, scroll-stopping promo — only your brand on screen. Everything's pre-filled; the simple screen alone is shippable.

Style

Format

Length

Advanced

{{ (ad.hook_text||'').length >= 80 ? 'Max length reached — 80 characters.' : ((80 - (ad.hook_text||'').length) + ' characters left (max 80).') }}

Endcard

Uses your brand kit only. If your logo is missing it simply shows nothing.

{{ ad.msg }}

Create a Walkthrough

A guided product tour. Pick a style and go — voice and language come from your brand kit.

Style

{{ createVid.msg }}

Image / Animation Studio

{{ allVisuals.length }} made

Make images and GIFs from your breakthroughs, then post them in one tap.

New visual

Pick a milestone, choose an image or animation, and we'll make it.

Add a visual platform to unlock the studio

Sticker pack (Stipop)

A branded reaction pack — ~24 transparent animated stickers from real founder moments, ready for the Stipop keyboard.

Your latest pack — {{ stickerPack.latest.sticker_urls.length }} stickers

Upload to Stipop (one-time):

A pack needs 10–30 stickers (PNG or GIF, transparent). Open https://studio.stipop.io ↗, create a pack, drag all the stickers in, add one bulk tag for the pack, then a few per-sticker tags (the caption words work), and submit for review. Once approved it appears in the Stipop sticker picker.

Embed your latest ship

Drop this on your site — it auto-updates to your newest GIF or sticker, linked to your build log.

The embeddable widget is a Broadcast feature.

Email signature

An image for your email signature that always shows your newest sticker.

The email-signature image is a Broadcast feature.

No images or GIFs yet

No visuals yet — hit "Make an image" above or on any breakthrough and it'll appear here.

{{ v.title }}

{{ gifMeta[v.id] && gifMeta[v.id].loading ? 'Writing title, tags, description…' : 'Loading…' }}

Add a little more detail to this milestone and .

Giphy GIF

{{ gifMeta[v.id].title }}

{{ tag }}

Source: {{ ctaLink() || 'add your site in Settings' }}

Giphy Sticker

YouTube Short

Writing Short details… Add a little more detail and .

Generate a promo video

A short promo from one shipped milestone, or a 30-second product launch video from several — rendered in every ratio your channels need.

Add a visual platform to unlock the Video Studio

{{ v.title }}

Save video

Your videos

Your videos now live in your Library

Generate above — then watch, download and share every video (alongside your GIFs, stickers and more) in your .

Your assets

The raw materials — brand, images and sound — we draw from to make your videos and posts.

Brand

Your logo
Font: {{ materialFont }}

No brand kit yet — add your site in Settings and we'll pull your logo, colours and font, or set them in the tab.

Your words — reused in your posts

“{{ w }}”

Uploads

{{ (activeProject && activeProject.name) || 'This project' }}

Your logo, screenshots and brand images for {{ (activeProject && activeProject.name) || 'this project' }}. Attach one to a milestone to make a post image-primary — it lands far better with a picture or a metric.

Detected logo

We found your logo

Add it to your library so it's ready to attach to posts.

A description is incredibly important — it gives us the context to craft better videos, images, and GIFs for you.

  • {{ u.name }} uploading… added {{ u.error }}
{{ assetKindLabel(a.kind) }} {{ a.meta.aspect }} Add description

No uploads in {{ (activeProject && activeProject.name) || 'this project' }} yet. Upload a screenshot or import your logo above.

Sound

Background music, narration voice and language we use on your videos.

Nothing set yet. Choose a default voice, language and music for this project in the tab, or pick per-video options when you generate in the Library.

Looking for badges, feeds and cross-posting? They live in the tab.

Library

Things you keep on purpose — your company story, repurposing and inspiration — plus everything that has aged out of your active wins or already been shared.

Campaign No campaigns yet — group items with the campaign picker on any card below.

Images

No images here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

Open ↗

GIFs

No GIFs here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

Open ↗

Stickers

No stickers here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

Open ↗

Videos

No videos here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

Open ↗

Walkthroughs & launch videos

{{ videoTitle(v) }}

{{ videoDate(v) }}

Download

Short-form

No short-form content here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

{{ m.description || m.why_it_matters }}

Long-form

No long-form content here{{ libCampaign ? ' in this campaign' : ' yet' }}.

{{ milestoneHeadline(m) }}

{{ m.description || m.why_it_matters }}

Saved

Nothing saved yet. Soon you'll be able to keep a win here for your company story, to repurpose, or for inspiration.

Archive

{{ archivedItems.length }}

Auto-archived after they age out — small wins after 5 days, major milestones after 15 — and anything you've shared lands here too.

Nothing archived yet — shared and aged-out wins will collect here.
{{ itemBig(m) ? 'Big' : 'Small' }}

{{ milestoneHeadline(m) }}

{{ m.why_it_matters || m.description }}

{{ itemAgeDays(m) }}d old Shared{{ m.share_count ? ' ×' + m.share_count : '' }} Aged out

Infiltrate

Distribution

Get your ships in front of more people, in more places — set up the doors that fit {{ (activeProject && activeProject.name) || 'this project' }}.

Brand

We pulled your logo and colours from your site — give them a quick once-over and save. This is what shows up on your videos, share pages, and end screens.

{{ brandCard.pulling ? 'Pulling your brand…' : 'Loading…' }}

One moment — filling everything in for you.

Logo

Your logo No logo yet

Colours

{{ sw.role }}

Saved ✓

Re-making your launch video… it'll update in your Videos tab shortly.

Your share pulse

Founders who share daily get noticed.

Make your first share to start your streak.

Changelog analytics

Analytics is a Pro feature

See impressions, views, clicks, and reactions per entry. Upgrade to Pro.

See Pro

Progress

No progress digest yet

This scores what you got done over a period and writes a shareable summary. Generate one once you have a few captures and posts.

★ Best {{ latestDigest.period_type }} yet
{{ Math.round(latestDigest.score || 0) }}

progress points · {{ digestTrend() }}

{{ (latestDigest.metrics && latestDigest.metrics[mk[1]]) || 0 }}
{{ mk[0] }}

{{ latestDigest.metrics.held_back.nudge }}

{{ latestDigest.summary }}

{{ v[0] }}

{{ (latestDigest.audience_variants && latestDigest.audience_variants[v[1]]) || '' }}

Settings

Your account

Settings for your whole account, used across every domain.

Connecting dev.to, Hashnode, Discord and Slack now lives in the tab.

Your promo power

{{ completenessMeter.pct }}%

The more you connect, the more we can make for you. This never affects your free launch video.

{{ u.done ? '✓' : '○' }} {{ u.label }} {{ u.need }} Unlocked

Subscription

{{ billingPlanLabel(billing.plan) }}

Checking your subscription…

Connectors

One-click

Connect the things you build with and your real moments turn into posts on their own. Read-only — we never change anything.

GitHub

every push → posts

Connected{{ githubAccountLabel ? ' · ' + githubAccountLabel : '' }} ✓ Not set up yet

Stripe

first customer → posts

Connected ✓

Vercel

shipped → posts

Connected ✓

GitLab

every push → posts

Connected ✓

Bitbucket

every push → posts

Connected ✓

Your launch & update videos live in the

Connect platforms for automatic posting

Connect dev.to, Bluesky and Mastodon so your approved posts go out on their own. What you enter is encrypted and never shown again after you save.

dev.to — API key for auto-posting Connected ✓
Bluesky Connected ✓
Mastodon Connected ✓

Connect the tools you build with

Connect a tool and we pull in the moments worth sharing — work you shipped, first payments, issues you closed — straight in as milestones, each with a post waiting. We only ever read; we never change anything. Your connection is encrypted and never shown again after you save.

{{ t.name }} Connected ✓

{{ t.scopeHint }}

{{ itokResult[t.key].text }} Last brought in: {{ itokSyncedLabel(t.key) || 'not yet' }}

Connect Claude Code

Real-time

When a Claude Code session ends, a short scrubbed summary of what you shipped flows in — and a post is waiting on each. Only a short summary ever leaves your machine, never a full transcript, and secret-shaped text is stripped before it sends.

  1. Click Generate key (done — it's in the command below).
  2. Copy this one line.
  3. Paste it into the window where Claude Code runs and press Enter.

That's it — your work will start flowing in.

{{ ccOneLiner }}

This line carries your key and is shown only once. Copy it now.

Your keys

No keys yet. Generate one above to connect Claude Code.

  • {{ k.label || 'Ingest key' }}

    Added {{ fmt(k.created_at) }} · last used {{ fmt(k.last_used_at) }}

    Active Revoked

Revoke is instant. To rotate, revoke the old key, then run Generate key again and paste the fresh line.

Connect your code on GitHub

Step 1 — start here

We pull in your recent changes and releases, group them into milestones, and write a post for each. Connect once and every push writes a post on its own.

{{ githubConnectMsg }}

Read-only access to your code. Your access is encrypted at rest — we never store it in plain text and never write to your repos.

One-click GitHub connect is being switched on. For now you can connect by project name just below.

Or connect by project name

{{ repoSyncResult.text }}

We remember your project, so each time only the new work since last time comes in.

Connect your payments on Stripe

Connected ✓

Your first customer becomes a post. Connect once and every payment after writes its own post — celebrating your revenue, never the maths behind it.

  1. {{ i+1 }} {{ s }}
{{ (CONNECT_GUIDES.stripe||{}).linkLabel || 'Open key page' }}

Read-only access to your payments. Encrypted at rest. We run one read-only check before connecting, and never show the key again — and never move your money.

Or connect in one click instead

{{ stripeConnectMsg }}

Stripe is connected. Your next customer payment writes its own post.

Last brought in: {{ itokSyncedLabel('stripe') || 'not yet' }}

Connect your patrons on Patreon

Connected ✓

A new patron becomes a post. Authorise once and every new patron — and milestones like passing 50 patrons — writes its own post, celebrating the support behind your work.

One-click Patreon connect is being switched on — please check back soon.

{{ patreonConnectMsg }}

Patreon is connected. Your next patron writes its own post.

Connect your deploys on Vercel

Connected ✓

When you ship, the world hears about it. Connect once and every production release writes its own post — celebrating that your work is live.

  1. {{ i+1 }} {{ s }}
{{ (CONNECT_GUIDES.vercel||{}).linkLabel || 'Open token page' }}

Read-only access to your deploys. Encrypted at rest. We run one read-only check before connecting, and never show the token again.

Or connect in one click instead

{{ vercelConnectMsg }}

Vercel is connected. Your next production release writes its own post.

Last brought in: {{ itokSyncedLabel('vercel') || 'not yet' }}

Connect your code on GitLab

Connected ✓

Your code on GitLab becomes your story. Connect once and every push writes its own post — celebrating what you shipped.

  1. {{ i+1 }} {{ s }}
{{ (CONNECT_GUIDES.gitlab||{}).linkLabel || 'Open token page' }}

Read-only access to your code. Encrypted at rest. We run one read-only check before connecting, and never show the token again.

Or connect in one click instead

{{ gitlabConnectMsg }}

GitLab is connected. Your next push writes its own post.

Last brought in: {{ itokSyncedLabel('gitlab') || 'not yet' }}

Connect your code on Bitbucket

Connected ✓

Your code on Bitbucket becomes your story. Connect once and every push writes its own post — celebrating what you shipped.

  1. {{ i+1 }} {{ s }}
{{ (CONNECT_GUIDES.bitbucket||{}).linkLabel || 'Open token page' }}

Read-only access to your code. Encrypted at rest. We run one read-only check before connecting, and never show the token again.

Or connect in one click instead

{{ bitbucketConnectMsg }}

Bitbucket is connected. Your next push writes its own post.

Last brought in: {{ itokSyncedLabel('bitbucket') || 'not yet' }}

Approval mode

Choose whether drafts wait for you, or go out automatically.

Approval required is the safe default. Turn on autopilot only when you trust the drafts.

In autopilot, approved drafts auto-post to Telegram only. X, LinkedIn and the rest are auto-approved and queued as copy-ready — you still post those yourself in one click.

Connect Telegram

Telegram is the only channel with a real auto-poster. Add your bot to the target channel as an admin, then paste the channel id or @username below.

Public channel: use @username. Private channel/group: use the numeric chat id (starts with -100). Leave blank and Save to disconnect.

Channels

Where approved drafts go. Only Telegram auto-posts; everything else is one-click copy-to-post.

  • {{ p.name }} {{ p.connected ? 'Auto-post connected' : (p.name === 'Telegram' ? 'Auto-post — not connected' : 'Copy-to-post') }}

This domain: {{ (activeProject && activeProject.name) || 'this domain' }}

Settings just for the domain you're editing.

Product website

Your product's web address. This is the keystone — your logo, colours, and where-you-post all start from here.

Saved ✓

{{ siteExtractMsg }}

✓ Verified

We couldn't find that account — check the exact spelling, or paste the profile URL from the platform.

Saved — we couldn't auto-verify this one, double-check the handle.

Video settings

How videos for {{ activeProject.name || 'this domain' }} sound. These are per-domain and save as you change them.

Saved ✓

{{ videoSettingsMsg }}

Posting profiles

The places you share updates. Your own profiles carry across projects; this project's accounts are pre-filled from your site where we can find them. Optional.

Already have a changelog? We'll pull it in.

History

Paste the web address of your changelog or blog. We fetch your past entries ourselves and add them as history — so future posts already know your product's story. You never paste entries by hand.

Where's my feed?

  • WordPress: add /feed to the end of your blog address.
  • Ghost: add /rss to the end.
  • Substack: add /feed to the end.
  • Not sure? Just paste your changelog page address and we'll find the feed for you.

{{ changelogImportResult.text }}

Name each codebase

Per codebase

You run more than one product from this project. Give each codebase its own product name and one-liner, and every post written from its work uses that — so an Acme codebase says "Acme", not the project name. Leave blank to fall back to the project name.

{{ r.repo_key }} Labeled ✓

Changelog

{{ (activeProject && activeProject.name) || 'This project' }}

Your "What's new" page, an embeddable widget for your own site, and an RSS feed — all scoped to {{ (activeProject && activeProject.name) || 'this project' }}. Switch the active project at the top to manage another one.

The changelog page, widget and RSS are a Pro feature

Upgrade to publish a hosted changelog, drop a whitelabel "What's new" widget on your own site, and offer an RSS feed.

See Pro

Walkthroughs

No install

A one-time setup: add the Walkthroughs button to your browser's bookmark bar. Later, open your product and click it whenever you want to record a clickable walkthrough — nothing to download.

🦊 Install Walkthroughs

One-time: drag it to your bookmark bar. Then open your product in a tab → click the bookmark → choose “This tab” → click through your flow → Finish. The session token refreshes about hourly; re-drag if it ever stops working.

{{ w.title || 'Untitled walkthrough' }}

{{ w.status }}

Open

No walkthroughs yet. Record your first with the button above.

Walkthrough CTA end screen

Per project

The closing call-to-action shown at the end of your shared walkthroughs. New walkthroughs start from these defaults.

Brand colour

The accent colour for the end-screen button and highlights. Tap a swatch from your brand kit, or type any hex.

Background image

A full-bleed image behind the end screen. Capture your landing page, paste a URL, or upload one.

End-screen background preview

{{ endcardBgMsg }}

Preview

{{ (endcardForm.headline || '').trim() || 'Your product — see it in action' }}

{{ endcardForm.subhead }}

{{ (endcardForm.button_text || '').trim() || 'Get started' }} {{ endcardForm.button_url }}
Video by FoxPlug

Updates live as you edit. Save to make it the default for new walkthroughs.

Brand Kit

Your logo, colours, fonts and voice for {{ (activeProject && activeProject.name) || 'this domain' }} — each domain keeps its own.

{{ brandKit && (brandKit.logo_light_url || brandKit.logo_dark_url) ? 'Brand kit set up' : 'Not set up yet' }}

Logo, palette, fonts, voice and language — used across every video for this domain.

What feeds this domain

Which connected repo, deploys, and store activity become this domain's updates.

Connect a repo, deploy, or store account under Your account, then choose what feeds this domain here.
  • {{ f.provider }}

    {{ f.label || '—' }} · {{ f.status }}

    {{ f.default_project_id === (activeProject && activeProject.id) ? 'Feeds this domain' : ('Feeds: ' + feedTargetName(f.default_project_id)) }}

    Multiple products in one repo? Set per-codebase names in .

Live data from your account. FoxPlug checks for new updates every 15 minutes.

Admin console

{{ admin.error }}

Loading admin data…

{{ adminStats.total }}

Total users

{{ adminStats.free }}

Free

{{ adminStats.pro }}

Pro

{{ adminStats.serial }}

Broadcast

{{ adminStats.trials }}

Trials active

{{ adminStats.new7 }} / {{ adminStats.new30 }}

New 7d / 30d

Users

No users yet

No users match “{{ admin.userSearch }}”.

Email Plan Subscription Projects +sites Trial ends Created Last seen Controls
{{ row.email }}admin {{ adminPlanShown(row) }} {{ (row.ent_plan || '—') + (row.ent_status ? (' · ' + row.ent_status) : '') }} subscribed {{ row.projects_count }} {{ row.extra_projects || 0 }} {{ fmtDate(row.trial_ends_at) }} {{ fmtDate(row.created_at) }} {{ fmtDate(row.last_sign_in_at) }}

Build-tool insights

No responses yet

{{ grp.label }}

  • {{ item.value }} {{ item.count }}
Recent responses ({{ admin.rows.length }})
DatabaseRepoNo-codeIDEOther
{{ r.db || '—' }} {{ r.repo || '—' }} {{ r.nocode_builder || '—' }} {{ r.ide || '—' }} {{ r.other_text || '—' }}

PH Promo

{{ phpromo.error }}

{{ phpromo.note }}

Loading…

No candidates. Click Refresh candidates to pull fresh launches.
ProductMakersSignal
{{ r.product_name }}
{{ r.tagline }}
{{ (r.makers||[]).join(', ') }} {{ r.source }}{{ phMeta(r) }} Open ↗
{{ phpromo.genProgress }}
No candidates waiting for a video — generate from the Candidates tab, or they've all moved to Post.
Needs video
{{ r.source || 'candidate' }}
{{ r.product_name }}
▶ Play video Open in PH ↗
Nothing ready to post. Generate and review videos first.
No poster
{{ r.product_name }} {{ r.status }}
▶ Play Open PH page ↗
Nothing posted yet.
{{ r.product_name }} Used it ✓ Reply! Posted {{ fmtDate(r.posted_at) }}

{{ r.reply_author || 'Maker' }} replied{{ r.reply_at ? ' · ' + fmtDate(r.reply_at) : '' }}

{{ r.reply_text }}

Post Promos

{{ phpost.error }}

{{ phpost.note }}

Loading…

{{ phpost.stage === 'candidate' ? 'No candidates here — scan for launches in PH Promo first.' : 'No ready videos here. Generate some in PH Promo first.' }}
{{ phpost.stage === 'candidate' ? 'Awaiting video' : 'No video' }}
{{ r.product_name }} {{ r.source || 'unknown' }}

Launch video

Clean, watermark-free launch videos from the EXACT page(s) you give — interior, feature and pricing pages welcome (the best material is often inside). You also get a GIF, sticker and poster.

{{ launchvid.result.product_name || 'Your launch video' }} — ready

Looking for promotable interior pages…

Suggested interior pages — click to include:

We couldn't build a strong video from those URL(s).

{{ launchvid.rejectMsg || 'Upload one or more screenshots (and optional instructions) and we will build the video from those. Your URLs and options above are kept.' }}

Screenshots {{ launchvid.showFallback ? '(needed)' : '(optional)' }}

Drag & drop images here, or click to choose

{{ launchvid.error }}

{{ launchvid.statusMsg || 'Rendering your launch video — this takes a couple of minutes. The video appears only when it is fully ready.' }}

{{ launchvid.shots.length }} screenshot(s) attached

Promotion — ProductHunt

Drop a warm, specific launch-day comment on today's indie launches — with a FoxPlug showcase video attached when it finishes rendering.

{{ promo.error }}

{{ promo.note }}

{{ promo.date }} · {{ promo.count }} shown
Voice & captions use this language.
{{ l.name }} Open in PH ↗ ▲ {{ l.votes }}

{{ l.tagline }}

first comment by @{{ l.first_comment_by }} · site ↗

{{ l.genError }}
Copied!
Rendering video…
Still rendering —
{{ l.videoPage }} Download Copied!

No qualifying launches for {{ promo.date }}.