Wiki — how the AI Mastermind LT site works
How this site works, what it publishes and what it does not. Written for a person and for a model alike.
How to join
A bot on Telegram lets you into the writing group — not a person, and not a waiting list. It asks for one consent and admits you at once. There are four ways to start; the steps after that are the same. The website's join button is blue, with the Telegram paper plane; in the bot the buttons are green. All you need is a Telegram account. Want the shortest version, with no technical detail? It is a separate page, in Lithuanian: Kaip prisijungti (“How to join”).
1. From this website (grupe.aimastermind.lt)
- Tap the blue “Join the group” button — it is at the top and at the bottom of the page.
- The Telegram bot opens. If it asks, tap START.
- Read the short consent and tap “Prijungti mane” (“Join me”). That means you agree that your messages, name and photo are shown in the public archive.
- The bot admits you to the group and shows two green buttons: “Prijungti grupę” (“Join the group”, if you are not in it yet; if you already are, “Eiti į grupę”, “Go to the group”) and “Sekti kanalą” (“Follow the channel”).
2. From the group’s pinned post
- In the group, at the top, open the pinned post about consent and tap its green button “Sutikimas” (“Consent”).
- The bot opens: tap START and “Sutikimas” once more. If you are not in the group yet, the bot shows “Prijungti mane” and then two green buttons.
3. From the channel’s pinned post
- In the channel, open the pinned post and tap its green button “Prisijunk” (“Join”).
- From here everything is as in the first way, from step 2.
4. You are already in the group and are asked to consent
- Open the bot (tap “Sutikimas” on its message or on the group’s pinned post) and tap START.
- Tap “Sutikimas” before 21 October 2026.
- The bot shows “Eiti į grupę” and “Sekti kanalą”. If you miss that date you are removed from the writing group — this is not a ban, you can come back at any time, and the channel and the archive stay open to you.
Why two buttons and not one
The group first, then the channel: both green, one under the other. One button for both is not possible, for two reasons. A Telegram bot cannot add or subscribe anyone itself — it can only approve your request. And a Telegram folder link, which joins several chats at once, does not wait for anything and would skip your consent, so we do not use it.
What works today
| Capability | Status |
|---|---|
| Message archive | Working: Messages — search, topic and date filters, a link to every message in Telegram. |
| Daily digests | Working: Digests — topic counts, dates and source links; the coverage is stated on each digest. |
| Events | Working: Events — the next meetup with its registration link, the planned dates (the last Friday of each month, 19:00) and past events; the page is in Lithuanian. |
| RSS feed | Working: /rss.xml — one entry per daily digest. |
| Data for machines | Working. Addresses and response shapes are in the LLM & MCP section. |
| REST API | Working: /bendra/api.php/v1/ — read-only, version 1. Do not guess addresses: the API lists its own, and so does the LLM & MCP section. |
| MCP server and CLI | Working, read-only. Open source, no dependencies: github.com/dkiaulakis/aim-lt-archive-tools. You run them yourself; they call the same public API, so they see exactly what a person with a browser sees. The API and MCP cannot send Telegram messages or DMs, write, admit members, or obtain the bot token. Ready-made prompts for your own agent are in the same repository. |
| Member directory | Working: Members — every person who wrote has their own page: topics, counts, the span of their activity and a link to their messages. Display names are published; what exactly, and how to ask for yours to be removed, is in Privacy. |
| Telegram bot | Working. A join request gets one message with one green button; tap it and the bot admits you to the writing group at once. The channel is no condition. The steps are in How to join. |
| Question for the daily digest | Working in a private chat with the bot: /klausk <question>. It is available only to group members with current consent; the question is published without the author’s name and never enters the AI-summary prompt. Privacy and retention limits are in the Privacy notice. |
| Report form | Working: Report a problem — the same link is in the footer of every page. |
| Privacy and consent | Working: Privacy. Two ways out in the Telegram bot (/nustatymai): leave the group (your messages stay, without your name) or leave and delete your messages; either way the bot removes you itself — what each one does is written in the settings. The website analytics choice is shown to every undecided visitor, but analytics remain disabled and no tracker starts. |
| Sign-in and an administrator panel | Not connected yet. The site has no accounts, and it offers no group administration actions. |
| Pinned posts | The list on the site is not wired up yet; see Pinned posts. |
How it works
Two diagrams, each answering one question. Beside each one is the same diagram as text, so that a model can read it too.
The same diagram as text (ASCII in English, mermaid source in Lithuanian)
Telegram group
|
v
Collection collector.py
|
v
Approval what may be published
|
v
Public extract projection.py
|
v
Pages and RSS generator.py
|
v
grupe.aimastermind.ltflowchart TB
A["Telegram grupė"] --> B["Surinkimas"]
B --> C["Patvirtinimas"]
C --> D["Viešas išrašas"]
D --> E["Puslapiai ir RSS"]
E --> F["grupe.aimastermind.lt"]
classDef base fill:#f2f6f9,stroke:#7c93a5,color:#1d2b36;
classDef edge fill:#e6f4fd,stroke:#2aabee,color:#0f2b3a;
class B,C,D,E base;
class A,F edge;The same diagram as text (ASCII in English, mermaid source in Lithuanian)
PRIVATE (stays in the archive) | PUBLIC (visible on the site)
---------------------------------+---------------------------------
unapproved / hidden / | message text
removed message --x |
@handle and Telegram ID --x | display name and a personal
| page (a photo, for some)
email, phone, keys --x | topics from the approved
| vocabulary + counts
| link to the message in Telegram
---------------------------------+---------------------------------
[ approval boundary: the publication grant ]flowchart TB
subgraph P["Privatu · lieka archyve"]
direction TB
A["Nepatvirtinta, paslėpta<br/>ar pašalinta žinutė"]
B["@vardas ir<br/>Telegram ID"]
C["El. paštas, telefonas,<br/>raktai"]
A ~~~ B ~~~ C
end
G{"Patvirtinimo riba<br/>publikavimo leidimas"}
subgraph V["Vieša · matoma svetainėje"]
direction TB
D["Žinutės tekstas"]
E["Vardas ir asmeninis puslapis<br/>(kai kurių - ir nuotrauka)"]
F["Temos iš patvirtinto<br/>žodyno + kiekiai"]
H["Nuoroda į žinutę<br/>Telegram"]
D ~~~ E ~~~ F ~~~ H
end
A -.->|"niekada"| G
B -.->|"niekada"| G
C -.->|"niekada"| G
G --> D
G --> E
G --> F
G --> H
classDef private fill:#fdeeee,stroke:#c0736f,color:#4a1f1d;
classDef public fill:#e6f4fd,stroke:#2aabee,color:#0f2b3a;
classDef gate fill:#fff6d9,stroke:#c9a227,color:#4a3b06;
class A,B,C private;
class D,E,F,H public;
class G gate;Data tables
Every SQLite table this project writes - 56 in total, collected straight from the code rather than by hand. The Reach column reads Private when this exact table never reaches the published site bundle, Public when it does, and Both when one name is used for two separate tables, a raw private one and a filtered public one.
| Table | Module | What it holds | Reach |
|---|---|---|---|
messages | collector.py | Raw copy: the text of every collected message, the sender ID, reply and thread references. The public copy in the projection holds only the approved text and author_key - never sender_id. The bot (storage.py) keeps a third table of the same name: a 48-hour message log for the daily digest, purged afterwards. | Both |
versions | collector.py | Every observed change to a message, one row per version - the edit history. | Private |
checkpoints | collector.py | A collection-progress mark for each chat, so a restarted collector does not begin from the beginning again. | Private |
refresh_state | collector.py | The boundary for each chat's re-check after the first collection. | Private |
reconciliation_state | collector.py | The progress of each chat's reconciliation of older messages (does the original still exist): checked down to which date and id, how many remain, whether it is complete. | Private |
message_codes | codes.py | The permanent public message code (three letters and three digits, e.g. #aah885), assigned once and never moved to another message; it reaches the projection as a column on the message. | Private |
media | collector.py | Raw copy: the download state, path and hash of every attachment. A separate public copy in the projection links only published messages to their attachments. | Both |
senders | senders.py | The real Telegram identity of each person: name, username, membership state. | Private |
sender_versions | senders.py | The history of observed identity changes (edits to a name or a username). | Private |
sender_photos | senders.py | The download state, path and hash of each person's profile photo. | Private |
chat_photos | senders.py | The download state of the group's or the channel's own photo (site_assets is the public copy). | Private |
message_reactions | reactions.py | Raw copy: reactions as they were collected, with the internal emoji ID. The public copy in the projection holds only the count beside a published message. | Both |
reaction_scan | reactions.py | A progress mark for each chat's reaction scan. | Private |
media_descriptions | describe.py | An AI (Ollama) generated description of an image or a video, stored per model and prompt version. The public copy in the projection covers only published attachments and carries the model and effort label the page shows. | Both |
link_descriptions | describe.py | An AI generated summary of a linked page, stored the same way; the public copy in the projection covers only the links of published messages. | Both |
link_previews | link_preview.py | What a shared link says about itself: the page's title, description, image address, site name and the date it was read (YouTube via its public oEmbed). The private copy is keyed on the address alone, with no person and no message; the public copy in the projection is attached to a published message's link. | Both |
link_preview_thumbs | projection.py | Our own re-encoded copy of a link's picture (at most 640 px, metadata-free), which the reader serves from this host; keyed by a content hash. The 1200x630 message share cards are kept here too. | Public |
message_share_cards | projection.py | Which one picture a social network shows when a link to a published message is shared: the attachment itself, or a 1200x630 card made from it. | Public |
message_source_state | source_state.py | A mark on each message for whether the original still exists in Telegram (deleted, edited or present). | Private |
author_summaries | members.py | An AI written one-line phrase for what this person writes about, tied to the real sender_id. | Private |
author_slugs | members.py | A record of when a permanent public address slug was created for each pseudonymous author_key. | Private |
author_profiles | members.py | The public /members/ page information about a person: message and reply counts, first and last activity - without a name. | Public |
author_topics | members.py | Which topics a person's messages were assigned to and how many times, for their /members/ page. | Public |
author_evidence | members.py | Which specific messages support a person's topic phrase. | Public |
authors | projection.py | The public identity a reader actually sees: the pseudonymous author_key, a name, initials, a colour number - never the real sender_id. | Public |
author_avatars | projection.py | Which avatar file belongs to which author_key, for the public archive and member pages. | Public |
site_assets | projection.py | Images the site publishes itself (for example the favicon set made from the group photo). | Public |
metadata | projection.py | Single-row key and value settings for the published projection itself (for example its freshness stamp). | Public |
message_topics | projection.py | Which topic or topics a published message was assigned to. | Public |
message_links | projection.py | Link cards (URL and context) attached to a published message. | Public |
retrospective_digests | projection.py | Machine-written digests of past days on which the channel had no digest: the day, the text, the model, the prompt version, the number of source messages; always labelled as machine-written. | Public |
pending | storage.py | The bot's own conversation state for each user (for example part-way through registration). | Private |
join_attempts | storage.py | A log of the join and leave events the bot observed, for moderation. | Private |
digest_deliveries | storage.py | A durable log so a daily digest is delivered to Telegram at most once. | Private |
recap_skips | storage.py | Mornings on which the digest was deliberately not published because the day had fewer messages than the threshold: the date, the message count, the threshold and how many people wrote. Numbers only - no messages, no names. | Private |
digest_corrections | storage.py | Corrections to an already-published daily digest: the edition key, the Telegram message number, the state and the times - so one correction is applied exactly once. | Private |
bot_contact | storage.py | Whether the bot is able to write to a person privately: the state (open, closed, reachable only through a join request), the reason and the time. It exists so a button is never offered for a message that could not be sent. | Private |
consent_records | storage.py | Each person's current decision on publication: who, when, which version of the text they saw and on which surface they tapped (GDPR Art. 7(1)). Only the permission lists derived from it travel to the site, never the table. | Private |
consent_history | storage.py | An append-only log of those same decisions: it shows that a person refused first and consented later, or the reverse. | Private |
consent_campaign | storage.py | Whether the consent question could be put in front of a member who joined earlier: attempts, outcome, deadline and, when consent stands, when it was given - the decision itself lives in consent_records. | Private |
bot_notices | notice_cap.py | When the bot wrote to a person on its own (a reminder, a removal notice): at most two notices, the second no sooner than 24 hours after the first. | Private |
invite_links | storage.py | Personal single-use links into the group for people who have consented but are not in it: the link, whose it is, when it was made and when it expires (24 h), when and why it was closed (used, no longer needed, expired, consent withdrawn). A closed link is revoked in Telegram; /istrinti erases these rows too. | Private |
consent_reentry | storage.py | The one-time result of checking a consent decision made before personal invites existed: whether the person is already in the group or received a personal invite. It prevents the repair message repeating on every sweep. | Private |
user_dm_log | user_dm.py | When and how an attempt to write to someone ended when it went NOT through the bot but through an administrator's own personal Telegram account: the time, the outcome and a short explanation. This is done only when the bot cannot write at all - Telegram does not let a bot open a conversation with someone who has never pressed START. The message itself is the same invitation to finish joining; its content is not stored here. Anyone who has blocked the bot is never written to. The table exists so that what was actually sent can be checked. | Private |
consent_consequences | storage.py | The waiting window after a refusal (10 minutes to change one's mind), kept in the database so a bot restart cannot lose it. | Private |
erasure_events | storage.py | A text-free record of every accepted erasure request (GDPR Art. 17): whose, up to what time their messages are erased, where the request came from, how many messages were removed and whether the confirmation was delivered. A later consent never lifts that cutoff. | Private |
member_settings | storage.py | Choices saved with the /nustatymai switches until 2026-09-25: name and photo hidden; messages kept out of the daily AI digest. They stay in force; the switches are gone. Only the list of hidden identities reaches the site. | Private |
member_settings_history | storage.py | An append-only log of those switch flips (who, when, which, from where) - what lets the bot attest to the site that an undo is real. | Private |
admin_dms | storage.py | A log of attempts to message a member from an administrator: who it was for, which administrator, the text, whether it arrived and the error if it did not. It never reaches the site - it is what lets the bot tell an administrator that a message did not get through. | Private |
community_questions | storage.py | Unpublished /klausk questions retained for at most seven days. When a question is reserved for a digest, its text and Telegram-ID link are destroyed immediately; the remaining row is deleted after acknowledged delivery. | Private |
community_question_throttle | storage.py | Only the Telegram ID and last /klausk submission time for the 24-hour rate limit. It never reaches the digest or site and is deleted when the limit expires. | Private |
link_pages | deep_intake.py | The text of the pages behind links shared in the group, for the community-ideas review: the address, the site, the status, the title, the extracted text (capped), its checksum, when it was fetched and the public message codes that mention the link. | Private |
doc_texts | deep_intake.py | Text extracted from documents attached in the group (PDF, HTML, DOCX) for the same review: the file number, the kind, the page count, the title, the text (capped), checksums, the time and the public message codes. | Private |
notes | deep_intake.py | A neutral description the local model wrote for each page or document - a description only, never a decision: the text, the model, the prompt version and the time. | Private |
verdicts | deep_intake.py | Claude's verdict on each idea (adopt now, pilot, watch, skip): the title, how it would be done, what we already have, the evidence, who judged it and when, and the linked task. | Private |
runs | deep_intake.py | Each run of the ideas review: its kind, start and finish, status, counts and the error, if there was one. | Private |
Sections
Messages — individual messages: the text, the images and the cards of the links that were shared. On a card the link speaks for itself: the page's title, description and picture (for YouTube: the title, the channel and a description). The site fetches the picture once, shrinks it and serves it from our own host — your browser never contacts the third-party server. Newest first; every message has its own address, and there are three reading modes: Srautas (stream), Grupuota (grouped) and Padieniui (by day).
Digests — the stated previous 24 hours, not necessarily yesterday as a calendar day. They show counts for the topics that were detected and links to the sources. They are not the whole archive, and they are not confirmed conclusions about what the participants agreed. Digests read as one stream only (Srautas, newest first): the Grupuota and Padieniui modes do not exist here — their addresses redirect to the stream — and reading the digests never changes the Messages reading mode.
Members — one page per person who wrote: their display name, topics with counts, the span of their activity and a link to their messages; for some, a profile photo as well. A message shows initials, and the name is one click away. What that means, and how to ask for removal, is in Privacy.
Filters are kept in the address: a copied address restores the same view. The filters need JavaScript; the published texts and ordinary links can be read without it.
The small Telegram #ID link opens that one original message. A group message and a channel message can carry the same number, so the address names both the source and the number. If you are new here: start with the bot, then come back and open the link again. Public news is in the channel.
The Telegram bot
The bot is the way into the community and the way you are told things. It does not write to the group for you.
Where our aimastermind.lt/botas link goes. It is our own address and it redirects (HTTP 301) straight to the Telegram bot @aimastermind_lt_bot. Nothing else happens on the way: there is no interstitial page, no data collected, no cookie set, and nothing learned about you. We print our own address rather than the raw Telegram link for one reason — clicking an unfamiliar link is a risk, and our domain is one you can see and check. Prefer to skip the redirect entirely? Go straight there: @aimastermind_lt_bot — that link goes direct, with no redirect at all.
If the link carries a ?start=... part, it travels with you — that is what tells the bot who you are and that you have already applied. The redirect changes nothing about it.
When you ask to join — the first message says briefly what is published and how to leave, and carries one green button, “Prijungti mane” (“Join me”). Tap it and the bot admits you to the writing group in the same moment. START or /start is needed only if you open the bot yourself first — the answer is the same. New members are never admitted without that tap. All the steps and buttons are in the How to join section.
Members who were already in the writing group have one 30-day transition, ending on 21 October 2026. After that date a member without valid consent is removed from the writing group, but can stay in the channel, read the public archive and wiki, and give the address /llm/ to their own AI agent.
Bot DM reachability is stored in the database. START or /start marks the private chat as activated; there is no normal expiry, but the person can later block the bot. The administrator therefore sees the last confirmed status and time, and a failed delivery updates it. Only the configured owner can make the bot send a private message through the Telegram admin interface. The public API and MCP are credential-free, stateless and read-only; they cannot send Telegram messages or DMs.
Your commands: /start — begin or resume your request; /rules — the group rules; /privacy — what the bot itself stores; /nustatymai — leave the group, or leave and delete your messages; /delete — erase what the bot stores, withdraw the permission to publish and leave the group. Both reach this site too: the decision travels into the site's permission record at the next rebuild (within 4 hours) — for what is published here see Privacy.
Once a day the bot posts a daily digest to the channel. Since 2026-10-22 it is built by a program without AI: it recognises topics from a fixed, pre-written dictionary on the bot’s server in Lithuania, and the post ends with a line saying it was prepared by an automatic topic dictionary, without AI; message text is sent to no AI service. Until 2026-10-21 inclusive the digest was written by a language model, and those posts carry the “AI santrauka” label; if an AI were to write it again, it would be labelled again. It carries only what happened in the past 24 hours: which topics were discussed, with links to the messages themselves. If a published digest turns out to contain a mistake, the same channel post is corrected in place — there is no second post and no second notification. Every day with at least one message in the group gets a digest; only a completely silent day, with no messages at all, has none — that is not a fault. Do not want your messages used for the digest? Write by e-mail (the address is at the bottom of the page); anyone who already chose that in the bot (/nustatymai, until 2026-09-25) keeps it.
Every bot message to a person carries this site's address and the contacts to ask for personal help.
Found an error or problematic content
A link by itself grants no right to see a private conversation: the original may be reachable only to members, or no longer reachable at all.
Use the Report a problem form — it is in the footer of every page and it carries the page you were on. Or contact the group administrators in the Telegram group and give the link to the specific message. Do not copy further private data into a public conversation.
For machines and agents
- Exact addresses, response shapes and examples are in the LLM section. A short description of the site for a model is at /llms.txt.
- Do not treat a digest as the whole history. Keep the time window, the partial-coverage markers and the link to the source.
- Do not quote synthetic examples as statements by real people.
Changes
Newest at the top. Only changes a reader can see on this site are recorded.
2026-10-03
- For group members the button is now "Sutikimas" ("Consent"), not "Prisijunk": they are already in, only the consent is missing. The channel's pinned post keeps "Prisijunk". The consent text now opens "Paspausdami sutinkate" ("By tapping you agree"), true for a newcomer and a member alike; consent given earlier stays valid.
- A separate short page, /prisijungti/ ("How to join", in Lithuanian), is for someone who is about to consent and join for the first time: one big green button, three steps and what the consent means. It is linked from the bottom of every page.
- The Wiki has a new section, "How to join": four ways in (from this website, from the group's pinned post, from the channel's pinned post, and for an existing member who is asked to consent), step by step, with the exact button names.
- Every join button - in the Telegram bot and on the website - is now one and the same green, so none can be missed or mistaken for another. The bot's consent button is called "Prijungti mane" ("Join me"; it used to be "✅ Prisijunk"); "Prisijunk" remains the pinned posts' button, which opens the bot.
- The channel has a pinned post with the same green "Prisijunk" button.
- After consent the bot shows two green buttons, one under the other: the group first ("Prijungti grupę", or "Eiti į grupę" for someone already in it), then "Sekti kanalą" (follow the channel).
- Why one button cannot do both: a Telegram bot cannot add or subscribe anyone itself, and a Telegram folder link joins chats with no approval at all, so it would skip the consent.
2026-09-26
- Joining the group is now one button, "✅ Prisijunk" ("Join"), under a short message that says what is published and how to leave. Tap it and the bot admits you at once; the channel is named on a line of its own and is no condition. The group's pinned post button reads "Prisijunk".
- The bot (/nustatymai) has no switches any more - it has two ways out: "🚪 Išeiti iš grupės" (leave; your messages stay without your name) and "🗑 Išeiti ir ištrinti mano žinutes" (leave and delete). Either way the bot removes you from the group itself, without a ban; choices made earlier stay in force.
- An objection to your messages being a source of the daily AI digest is made by e-mail (the address is at the bottom of the page).
2026-09-21
- The site gained a Terms page, while Privacy and both Wiki languages now explain START, publication consent and the single deadline for existing writing-group members: 21 October 2026.
- Every website visitor who has not answered sees equally clear Agree and Decline choices. Analytics remain disabled: saving the choice alone starts no tracker.
- The API and MCP are explicitly read-only: they cannot send Telegram messages or DMs, write, admit members or access the bot token.
2026-09-18
- The LLM page now exists in two languages: Lithuanian at /llm/ and English at /en/llm/. A globe button above the text switches between them - it appears on this page only, it works without JavaScript, and the browser remembers the language you chose for next time.
- The English version carries the agent starter prompt AND every description around it, so a person or a model reading in English gets the same page rather than a shorter one.
2026-09-16
- The Telegram bot admits people to the group itself: an applicant gets one message with the channel button and one question about publication; tapping "✅ Sutinku skelbti" while subscribed to the channel admits them in that same moment - nobody waits for an administrator's decision any more. A refusal is recorded, with 10 minutes to change one's mind.
- The daily digest in the channel reports only what happened in the past 24 hours: what was discussed, shared and decided, with the tools and sources named. The model's guesses, doubts and advice are removed before publication. You can keep your own messages out of the digest in the bot (/nustatymai).
- The bot gained three switches (/nustatymai): publication on the site off, name and photo hidden, messages kept out of the daily AI digest - one tap each, and the site honours them. The settings section of the privacy notice was rewritten, and its link opens the bot.
- A shared link's card: YouTube links show the title, the channel and a description (previously only the address), and the site fetches the card's picture once, shrinks it and serves it from its own server - your browser never contacts the third-party site. The API's links list gained a thumbnail field on each preview.
- Digests read as one stream (Srautas) only: the Grupuota and Padieniui modes are gone from there, their addresses redirect to the stream, and reading the digests no longer switches the Messages mode. Messages keep all three modes.
- The Wiki was brought in line with what the code does now: the bot section, the digest and link descriptions, and the data-table list grew from 28 to 39 - the consent, settings, link-preview, picture and restored-digest tables.
2026-09-16
- The LLM section was checked from the outside: the starter block was pasted into a stranger's clean agent session; the agent read the archive, summarised a digest and found messages on a topic. What it had to guess is now in the block: "🤖 AI santrauka" and "📋" rows are the bot's daily summaries, not a member's words; the conclusion often sits in the reply (reply_to_id); where paging lives.
- The MCP server and command-line instructions now work on a stranger's machine: the public code address (github.com/dkiaulakis/aim-lt-archive-tools), the install steps (git clone, Node 18) and a real example path instead of an internal one. There are six tools, not four - the server itself says so.
2026-09-09
- A link you share on a social network now opens. The tracking parameters Facebook, Instagram, X and the others append (fbclid, utm_ and the like) are stripped before the address is checked; such a link used to answer with an error. An unknown parameter is still refused.
- The card a shared link shows - the title, the description and the image - now renders the same way on every platform that was checked.
- The Wiki tab opens the Lithuanian page directly, with no redirect in between. On the English page the theme button now announces itself in English to a screen reader.
- The Wiki was corrected. The page no longer claims there is no report form - there is one, and the link to it had been in that same page's footer all along. The approval-boundary diagram no longer claims an author's name never becomes public: names are published in the Members section, and were while the diagram said otherwise.
2026-09-08
- The Wiki now exists in two languages: Lithuanian at /lt/wiki/ and English at /en/wiki/; the address /wiki/ opens the Lithuanian one.
- A privacy notice was published at /privacy/: what this site publishes about people, what it does not, and how to ask for your name to be removed. The link is in the footer of every page.
- Analytics are switched on only if you agree, and that consent can be withdrawn at any time through the footer link "Privacy & AI settings".
- Text written by an AI is marked as such on the statically published pages too, not only in the reader.
2026-09-07
- A real REST API arrived: /bendra/api.php/v1/ - a message list, search, a single message and a single attachment, in JSON. The LLM page lists every address, parameter and limit.
- With it came an MCP server and a command-line tool. Both are clients of that same API, so they see exactly what a person with a browser sees.
- Downloading the whole archive is still not possible and will not become possible: the API opens only the four surfaces the consent grant covers.
2026-09-07
- Sections renamed: Archyvas (Archive) to Žinutės (Messages), Dokumentacija (Documentation) to Wiki. The active section is now the page heading, so the repeated heading line was removed.
- New sections: Wiki, with the system architecture and this list of changes, and LLM, with the addresses meant for machines.
- A new RSS feed at /rss.xml carrying the daily digests.
- One layout, a small brand mark and a sticky footer on every page; horizontal scrolling on phones and tablets is gone.
2026-09-07
- The whole public site - the message archive, the daily digests and the reader code - is now refreshed by a single scheduled run every 6 hours.
- Before publishing, the digest links are checked against the freshly built approved extract; if they disagree, the site is left unchanged.
2026-09-07
- The message archive gained a topic filter and relevance-ranked search.
- Machine-readable digest data (/apzvalgos/index.json), /llms.txt and /robots.txt were published.
2026-09-06
- The public message archive opened: search, date filters and a link to every message in Telegram.
- Daily digests with topic labels, counts and source links.
- The light and dark theme is remembered in the browser and applies on every page.