Skip to main content

tungsten-blog

A blog for your Tungsten panel, built to be found: on Google (SEO), in AI search like ChatGPT, Perplexity and Google AI Overviews (GEO), and in answer boxes and voice assistants (AEO).

What you get

In the panel

  • A Blog menu: Posts, Categories, Tags and Authors.
  • A post editor with a rich text editor, cover image, draft / publish / schedule, and three tabs: SEO, GEO and AEO.
  • A live SEO / GEO / AEO score next to the editor, with a tip for every check that fails. The posts list shows the score too.
  • A Preview link for drafts and scheduled posts.

On your site

  • /blog: the post list with a featured post, categories, search and pages.
  • /blog/<slug>: the post, with a summary box, key points, table of contents, how-to steps, FAQs, sources, author box and related posts.
  • /blog/category/<slug>, /blog/tag/<slug>, /blog/author/<slug>.
  • /blog/feed.xml (RSS), /blog/sitemap.xml, and at the site root /sitemap.xml, /robots.txt and /llms.txt.
  • /blog/<slug>.md: a clean Markdown copy of each post, for AI tools.

SEO

Title and meta description, canonical URL, noindex switch, Open Graph and X (Twitter) cards, clean slugs, breadcrumbs, rel=prev/next pages, a sitemap with last-modified dates, and schema.org JSON-LD: BlogPosting, BreadcrumbList, WebSite, Organization and Person.

GEO (generative engine optimization)

What AI search can quote: a short summary (TL;DR) at the top, key points, sources (as citation in the schema), a real author with bio and profile links, "updated" dates, /llms.txt that lists every post with its summary, and a Markdown copy of each post. robots.txt welcomes AI crawlers like GPTBot, ClaudeBot and PerplexityBot (turn off with ai_crawlers=False).

AEO (answer engine optimization)

Direct answers: FAQs shown on the page and as FAQPage schema, how-to steps as HowTo schema, speakable marks for voice assistants, and score checks for question-style headings and short answers.

Install

pip install tungsten-blog
from tungsten import Panel
from tungsten.storage import LocalStorage
from tungsten_blog import BlogPlugin

panel = Panel(
    ...,
    storage=LocalStorage(public=True),   # so visitors can see cover images
)
panel.plugin(BlogPlugin(
    site_name="Acme",
    site_url="https://acme.com",
    description="Guides and news from the Acme team.",
    logo="https://acme.com/logo.png",
    same_as=["https://www.linkedin.com/company/acme"],
    nav_links=[("Home", "/"), ("Pricing", "/pricing")],
))
panel.create_tables(engine)
panel.mount(app)

Needs tungsten-admin 0.1.5 or newer.

Options

Option Default What it does
site_name "Blog" Your site's name, in titles, feeds and schema
site_url panel app_url, else the request host Public address used in canonical links, sitemap and schema
path "/blog" Where the blog lives
title "Blog" Heading of the blog home
description, logo, language Used in meta tags, feeds and schema
per_page 10 Posts per page
site_files True Serve /sitemap.xml, /robots.txt, /llms.txt at the site root. Turn off if your site has its own
ai_crawlers True Allow AI crawlers in robots.txt
same_as [] Your organization's profile links
nav_links [] Links in the blog header
twitter Your X handle, like @acme
accent "#dc2626" Link and button color
llms_intro Extra text at the top of llms.txt

Your own design

The pages are Jinja templates. Copy any of them into one of your panel's template_dirs with the same path to change it:

  • tungsten_blog/public/layout.html (head tags, header, footer, styles)
  • tungsten_blog/public/index.html (lists)
  • tungsten_blog/public/post.html (a post)
  • tungsten_blog/public/not_found.html

Score in your own code

from tungsten_blog import analyze_post

report = analyze_post(post)
report.score            # 0 to 100
report["geo"].checks    # each with .ok, .label and .tip

With the MCP plugin

With tungsten-mcp installed, AI assistants like Claude can write and edit posts for you: "Write a draft post about X with 4 FAQs and a summary."

More Tungsten plugins

Package What it adds Docs
tungsten-leads Leads list, stages, timeline and your own lead form fields README
tungsten-meta-leads Facebook and Instagram lead form leads, with one-click setup Guide
tungsten-whatsapp WhatsApp for leads: click-to-chat, Cloud API or WhatsApp Web Guide
tungsten-mcp MCP server, so AI assistants like Claude can read and change your data Guide
tungsten-tickets Help desk: tickets, replies, notes, SLA and a customer support page Guide
tungsten-seo-audit SEO audit of your website: score, fix tips, AI search checks, history Guide
tungsten-security-audit Security audit with a score and fix tips, plus a login log with lockout Guide

Core package: tungsten-admin. Website and docs: https://tungsten.prisminfoways.com/

Metadata

Release files for tungsten-blog 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tungsten-blog 0.1.0
File Size Uploaded
tungsten_blog-0.1.0.tar.gz 32.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tungsten-blog 0.1.0
File Interpreter ABI Platform
tungsten_blog-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 67.0 kB

Release files / tungsten_blog-0.1.0.tar.gz

Download URL tungsten_blog-0.1.0.tar.gz
Size 32.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8bf941a6a2805147e02294302f701d1e27de85a10832df50df74f4730b6a7891
BLAKE2b-256 checksum
How to use checksums
d012feecd1045d6c3ced4911395292eb95e325f1d2784580aaad14e13c0cbf56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tungsten_blog-0.1.0-py3-none-any.whl

Download URL tungsten_blog-0.1.0-py3-none-any.whl
Size 34.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a055b113e690097ed556554f8f4c3c7f66d1e75750148c4e14156b1a3023fb9b
BLAKE2b-256 checksum
How to use checksums
09a96b7cc079e6ede543880f1f7948e41c425ee4cb5980439b25dceca9c58669
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page