These are the rules every article on this site has to satisfy before it is published. They are kept in the site’s repository and this page is generated from that file, so what you read here is what the publishing pipeline actually enforces.
Avoltium Editorial Standards
The rules every article on avoltium.in must satisfy before it goes live.
Each rule exists because the failure it prevents actually reached production.
Where a rule is machine-checkable it is enforced by qc_check.py, which runs
as a gate inside generate_article.py and as a weekly site-wide audit. An
article that trips a BLOCKER is saved as a draft instead of published.
1. Images — depict the subject, not the words
**The rule: an image must show what the article is _about_. Never illustrate
the headline literally, word by word.**
This is the single most damaging failure mode this site has had. Real examples
that were live:
| Article | Wrong image | Why it happened |
|---|---|---|
| "BriHyNergy Ships 15MW PEM System" | a cruise ship | "ships" is a verb — it means delivers |
| "India's First Hydrogen-Powered Train" | an LNG carrier vessel | keyword picked from the wrong noun |
| "Green Hydrogen Certification Portal" | a blue jay bird | no relationship at all |
| "BOP Testing for Well Control" | a green office campus | BOP is ambiguous (see §2) |
| "Ultrapure water — outsized risk" | a passenger train | topic ignored entirely |
| "Gujarat Data Centre Policy" | a politician beside a train | headline keyword mismatch |
How to choose an image
1. Read the article body — not the headline — and name the physical system
it actually discusses (an RO skid, a fuel cell stack, a compressor head).
2. Write the prompt describing that system.
3. Ask: "if a hydrogen engineer saw this picture next to this headline, would
it look researched or automated?" If automated, redo it.
Ambiguous words — never feed these straight into an image prompt
qc_check.py raises a warning when a headline contains any of these:
| Word | In an energy headline it usually means |
|---|---|
| ships / shipping | delivers a product, not a marine vessel |
| BOP | Balance of Plant or Blowout Preventer — disambiguate first |
| plant | an industrial facility, not vegetation |
| train | rail transport (verify it is not "train a model") |
| cell | an electrochemical cell |
| stack | an electrolyzer stack |
| current | electrical current |
Image technical requirements
- Minimum 900 px wide; target 1200 × 675 (16:9)
- Aspect ratio must not exceed 2.4:1 — ultrawide banners crop badly in cards
- Alt text is mandatory and must describe the image, not repeat the headline
- Always pass a random
seedto the image API — without it, identical prompts
return the identical cached picture for every article on that topic
Image credits
- A third-party image (Wikimedia, CC-BY) keeps its credit block verbatim.
Attribution is a licence condition, not a courtesy.
- When an image is replaced, the old credit must be removed in the same
edit. A credit describing an image that is no longer on the page is a false
statement about provenance.
- AI-generated images carry the standard notice:
> Featured Image: Illustration generated by Avoltium using AI, created to
> depict the systems discussed in this article.
2. Title and content must agree
The title states what the body delivers. If a rewrite changes the subject,
the title changes with it.
Live failure: post 168 was titled *"BOP Testing and Maintenance: Best Practices
for Well Control"* — blowout preventers, oil & gas. A hydrogen-focused
rewrite prompt made the model read "BOP" as Balance of Plant, so the body
became a green-hydrogen article under an oil-well headline. Neither the title
nor the body was wrong on its own; together they misled the reader.
**Before rewriting anything, resolve every acronym in the title against the
existing body.** Retitle rather than let the mismatch stand.
3. Originality — the AdSense-critical rule
Never republish syndicated newswire copy. Duplicate content is the most
common reason AdSense applications are rejected.
When covering a news event:
1. The event is the hook — one opening paragraph, no more.
2. The rest is original engineering analysis: the constraints that decide
whether the thing works, balance-of-plant and water-treatment implications,
real efficiency and cost figures.
3. Never paraphrase a source sentence by sentence. Replace it with your own
technical argument.
Also prohibited:
- Inventing quotes attributed to real, named people
- Claiming Avoltium involvement in third-party projects
- Publishing a post with an empty or stub body (thin content); minimum
2,500 characters, target 900+ words
4. House style for technical writing
Voice. Arun, Chief Engineer at Avoltium. Technical, specific, confident.
Written for practising engineers, not a general audience.
Substance. Include real numbers — efficiencies, current densities,
pressures, costs — wherever they support the argument. Specificity is what
separates this site from content farms.
Required structure.
1. Engineering Insight box — one-sentence takeaway, opens every article
2. <h2> / <h3> subheadings
3. At least one styled <blockquote>
4. Natural mentions of "electrolyzer" and "water treatment" where relevant
5. One internal link each to the electrolyzer and water-consumption
calculators — the site's most valuable original assets
5. Scientific notation — Unicode and HTML only
LaTeX must never reach the page. No backslash commands, no $…$ math.
It renders as literal \Delta T and \frac{...} garbage in the browser.
| Write | Not |
|---|---|
H<sub>2</sub>O, CO<sub>2</sub> | H_2O, \text{CO}_2 |
A/cm<sup>2</sup>, Nm<sup>3</sup> | A/cm^2 |
| η, Δ, Ω, μ, °C, ± | \eta, \Delta, \Omega |
V<sub>cell</sub> = E<sub>rev</sub> + η<sub>anode</sub> + i·R<sub>ohmic</sub> | $V_{cell} = ...$ |
Write equations as readable inline HTML. Division goes on one line with ÷ or
a bracketed numerator/denominator — never \frac.
6. HTML hygiene
- Inline styles only. Never emit a
<style>block into a post body; it
renders as visible CSS text in this theme.
- CSS property names must be fully hyphenated. Generated copy has a
persistent habit of stripping hyphens — backgroundcolor, fontsize,
marginbottom — which silently kills the styling. sanitize_content()
repairs ~30 known cases and qc_check.py blocks any that survive.
- No markdown fences (
`) in HTML output. - Hyphenated compounds stay hyphenated: hydrogen-powered, next-generation,
large-scale, state-of-the-art, zero-incident.
- Internal links keep their hyphens:
/electrolyzer-calculator/, not
/electrolyzercalculator/ — the unhyphenated form 404s.
7. Publishing controls
- Cadence: Mon/Wed/Fri at 05:23 UTC. Daily posting at a round hour reads as
automated to search engines.
- No duplicate topics. The publisher checks existing titles and only picks
uncovered subjects; when the pool is exhausted it uses dated review titles.
- Categories are assigned per topic, never dumped into one bucket.
- Comments and pingbacks are closed site-wide and by default. The site has
no moderation capacity and the only comments ever received were malware
links.
- Every post needs an excerpt — without one, Google invents its own search
snippet from arbitrary body text.
- Every third-party call retries with backoff. Pollinations and the Gemini
API both fail transiently, and a single unretried failure costs a whole
publishing slot. Two consecutive slots were lost this way: a Pollinations
HTTP 500 on 5 Aug parked a finished article as a draft, and on 7 Aug the
Gemini fallback chain burned through all three models in 0.6 s of 429/503
and produced nothing. Retry logic lives in resilient.py; the model chain
must retry within each model before falling through, so the chain outlasts
a short quota window.
- Article text is generated before the image is uploaded. Text generation
is the step most likely to fail outright and the only one with nothing to
undo. Uploading first meant a dead Gemini chain stranded an orphaned image
in the media library (media 1117, 7 Aug).
- A held draft is retried, not forgotten.
recover_drafts.pyruns daily,
regenerates missing images, re-runs the full QC suite, and publishes only
when every blocker clears. Drafts blocked for editorial reasons — thin
content, LaTeX, title mismatch — are reported and left for a human.
Advertising
- At most one manual in-article unit per post. Auto Ads is enabled
site-wide; manual units stacked on top of it push a page over the ad-density
line. The unit is opt-in via the ADSENSE_SLOT_ID secret — unset, posts
carry no manual unit at all.
- The unit anchors to an
<h2>past the article midpoint, never mid-paragraph,
and is injected after the QC gate so its inline script text is not
counted toward the thin-content threshold.
8. Provenance — say where it came from, and never invent it
**The rule: an article states who stands behind it, when it was last updated,
and that AI assisted the drafting. A link is only ever presented as evidence
for a sentence if the article was written from it.**
Every published post carries a provenance block (editorial_provenance.py),
holding a named byline, the last-updated date, the AI-assistance disclosure,
and Further reading.
Further reading is not a citation list
The distinction is the whole rule. Further reading is authoritative
background on the subject. A source is the document a specific claim was
taken from, and it can only be recorded at the moment the claim is written.
When the first 49 posts were audited, none carried a source URL and not one
linked outside the site — they had been generated from topic prompts, not from
documents. A "Sources" list bolted on afterwards could only contain links
chosen because they looked like they might support the text. That is a
fabricated citation: an engineer who follows one, finds it does not say what
the sentence says, and stops trusting the site. It is the same failure as an
image file named "IISc hydrogen plant" that turns out to be a street with a
scooter on it — a label that promises evidence and does not carry it.
So: never add a citation retroactively. Fix it at generation time instead.
Checking a link before it ships
- Fetch it. Only a 200 on the final URL may be published.
- Read where it redirected to. Two energy.gov links returned 200 after
redirecting to unrelated offices, and the DOE "Hydrogen Shot" page 404s.
All three would have looked perfectly plausible pasted in unchecked.
- A 403 is not permission to guess — IEA, IRENA and ISO block automated
fetches, so their pages cannot be verified this way and are not published
as verified.
The disclosure has to be true
The wording says *drafted with AI assistance and checked against these
standards* because that is exactly what the pipeline does: it drafts with a
model and gates on qc_check.py. It does not claim a human line-edited
the piece, because for most posts none has. Overstating review is worse than
disclosing none — it is the specific claim a reader can catch you in.
If a human does review an article, strengthen the wording for that article.
9. Enforcement
# Audit every published post; exit code 1 if any blocker is found
WP_USERNAME=... WP_APP_PASSWORD=... python qc_check.py| Where | When | Effect |
|---|---|---|
generate_article.py | every publish | blocker → saved as draft, workflow goes red |
qc_audit.yml | weekly + manual | site-wide report, red run on any blocker |
Severities. BLOCKER — never reaches readers (thin content, broken CSS,
LaTeX, <style> blocks, missing image or alt text, duplicate title, broken
internal links). WARN — publishes but needs a human eye (ambiguous headline
term, small or ultrawide image, missing Engineering Insight box).
A warning on an ambiguous headline does not mean the image is wrong. It
means a human must confirm the picture reflects the article's meaning rather
than a literal reading of its words.
