Checking session
{{ tabs.find(t => t.id === activeTab)?.label }}
PEKO ADMIN

Dashboard

Peko

BOT

{{ cfg.BOTNAME || 'Peko' }}

{{ dashboardStatus.online === true ? 'Online' : dashboardStatus.online === false ? 'Offline' : 'Checking' }}
Facebook {{ dashboardStatus.online === true ? 'Connected' : dashboardStatus.online === false ? 'Disconnected' : 'Unknown' }}
MQTT processing {{ mqttStatusAvailable ? (mqttEnabled ? 'Enabled' : 'Paused') : 'Unavailable' }}
Process uptime {{ dashboardStatus.uptime === null ? '—' : formatUptime(dashboardStatus.uptime) }}
Messages received {{ dashboardStatus.messageCount === null ? '—' : dashboardStatus.messageCount.toLocaleString() }}

{{ dashboardStatus.error }}

Quick access

Admin tools

Bot Configuration

Core identity settings for your Peko bot.

{{ saveStatus.msg }}

Display name for the bot

The Facebook user ID the bot logs in as

Character before commands

Add Facebook user IDs — we'll fetch their profile info to verify

{{ adminError.msg }}

{{ admin.name || 'Loading…' }}
{{ admin.id }}
✗ Failed to load user info
No admins added yet. Add one above!

When on, only configured Admin and Developer IDs can use the bot. Everyone else is silently ignored.

🔒 Active — only configured Admin and Developer IDs can interact with the bot right now.

These IDs can use the bot alongside the Admin IDs above.

{{ devIdError }}

{{ id }}

Keys are encrypted in MongoDB and hidden by default. Each user holds one key for up to 60 seconds; a key is not assigned to another user during that lease. Use Test to check a key even while it is flagged or assigned; testing it does not change its current assignment.

{{ geminiStatusConnected ? 'Live key status connected' : 'Connecting to live key status…' }}

{{ geminiStatusError }}

{{ geminiKeyError }}

An environment-based Gemini key is also configured as a fallback.

{{ key.value || key.masked }}
{{ key.source === 'environment' ? 'Environment fallback' : 'MongoDB key' }}
Key ID: {{ key.id }}
{{ key.status === 'cooldown' ? 'Cooldown' : key.status === 'flagged' ? 'Flagged' : key.status }} {{ geminiCooldownRemaining(key) }} {{ key.reason }}
{{ geminiKeyTestResults[key.id].ok ? 'Gemini response' : 'Gemini test failed' }}
{{ geminiKeyTestResults[key.id].ok ? geminiKeyTestResults[key.id].response : geminiKeyTestResults[key.id].error }}

No Gemini keys are configured yet. Add a key to enable AI chat, image understanding, and audio transcription.

Only key errors, unavailable-key errors, and flagged keys are recorded. Showing 20 entries per page. Audit entries are automatically deleted after seven days.

{{ geminiAuditError }}

{{ log.event }} {{ new Date(log.createdAt).toLocaleString() }}
User: {{ log.userId || '—' }} · Key: {{ log.keyMasked || '—' }} ({{ log.keyId || 'no key' }}) · Model: {{ log.model }} · HTTP {{ log.statusCode }}
{{ log.details }}
{{ log.error }}

No Gemini API activity has been recorded in the last seven days.

Page {{ geminiAuditPage }} of {{ geminiAuditTotalPages }} · {{ geminiAuditTotal }} errors

Facebook Session

Paste your exported Facebook appstate (session cookies).

{{ saveStatus.msg }}
How to export your appstate
  1. Install the c3c-fbstate or Get FB State browser extension
  2. Log into Facebook with the bot's account
  3. Click the extension and copy the JSON array
  4. Paste it below and hit Save

Large JSON array of cookie objects

{{ appstateMsg }}

Terminal Logs

Live output from the bot process.

{{ logConnected ? 'Live' : 'Disconnected' }}
No logs yet — waiting for output…
{{ formatTs(entry.t) }} {{ entry.level.toUpperCase() }}

Share Post

Share a post to the bot's timeline, then automatically move it to trash.

How to get the Post ID
  1. Open the Facebook post and copy its URL
  2. From facebook.com/photo/?fbid=1234567890 — the number after fbid= is the Post ID
  3. For a regular post URL like /permalink/1234567890, use the last number

Numeric ID from the post URL (e.g. 1432743341209387)

Loading preview…
{{ postPreview.title }}
{{ postPreview.description }}
{{ postPreview.url }}

Text shown with the reshare before it gets deleted

Who can see the post for the brief moment before it's deleted

How many times to share & auto-delete this post

Running… {{ shareProgress }} / {{ shareTotal }} completed {{ shareLogs[shareLogs.length-1] || '' }}
{{ postStatus.msg }}
{{ line }}
Peko
Peko AI
Powered by Google Gemini

Start a conversation with Peko

{{ message.role === 'assistant' ? 'Peko' : 'You' }}
{{ message.content }}