Changelog
Product Updates
Building intelligence in public.
v0.7.0-beta
SEP 28, 2026
The app was rebuilt around reading, and every number, label and colour on screen was checked for what it rests on.
The app was rebuilt around reading, and every number, label and colour on screen was checked for what it rests on.
What’s new
A new reading surface: one reading column for the brief, one date format, a 24-hour clock that names its time zone.
Emails redesigned on the same design as the app.
One table decides who published each source. Russian independent media such as Meduza, Mediazona and The Insider are their own side.
Source labels say what kind of source something is. Words like “premium” and “verified” are gone.
Telegram items in the brief link to the original post.
16 more news outlets, including Kyiv Post, RBC-Ukraine, Interfax-Ukraine and Militarnyi.
Russian-language reporting from outlets already in the pipeline is no longer dropped by the relevance filter.
Known gaps
Nothing yet stops a brief from being sent. On some days a casualty figure still reaches a title without attribution; we correct it on the platform the same morning.
Full entry: osnt.in/changelog
Today’s brief: app.osnt.in/brief/latest
v0.6.0-beta
SEP 17, 2026
A rule you can read, and a check that catches us
Eight days since v0.5.0. The narrative layer got the part it was missing: a second stage that reads the claim itself and decides whether it carries a frame or only reports an event. This entry is the rule.
What's new
A membership rule in three parts. A claim belongs to a framing when its own text carries at least two of three things: who it holds responsible, what judgement it makes, and what it says should follow. Reporting an event without those stays a topic.
The fourth slot was dropped from the test. Naming a problem turned out to be present in 83% of everything we read, and something that common cannot tell one thing from another. It is still recorded; it no longer decides.
Judgement has to be quoted. When the model marks a claim as carrying a moral judgement, it must return the exact words from the text that carry it. If those words are not in the text, the judgement is discarded and the mismatch is counted. That check has already caught the model once.
One narrative moved out. We classified "Ukrainian strikes on Russian logistics as legitimate defence" as a Ukrainian framing. Measured on 9 September 2026: of its 155 links, 127 already sat under two neutral topics, and of the 29 claims we could evaluate, 4 carried the frame in their own text. Ukrainian outlets report these strikes as events, not as arguments. It is a topic now.
Under the hood
Pre-rule links checked. Links added before the membership rule existed have now been run against it: of 254 such links, 36 pass. Measured 16 September 2026. That was the second of the two gaps named in v0.5.0. The first one stands.
Why it matters
A framing is not a source. Reuters repeating a Russian ministry statement is still that statement; a Ukrainian outlet reporting a strike is not making an argument about it. The test reads the claim, never the byline, and that is the part most of this work goes into.
The quote requirement is the same idea turned on ourselves. A model can call anything a judgement. Making it show the words means a reader can check the call, and means we find out when it invents one.
Known gaps
Narratives are still defined by hand and do not emerge from the data. Framings are thin by design: most war reporting is reporting, not framing, and a page with a published rule and nothing that met it is the honest state.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.6.0-beta
SEP 17, 2026
A rule you can read, and a check that catches us
Eight days since v0.5.0. The narrative layer got the part it was missing: a second stage that reads the claim itself and decides whether it carries a frame or only reports an event. This entry is the rule.
What's new
A membership rule in three parts. A claim belongs to a framing when its own text carries at least two of three things: who it holds responsible, what judgement it makes, and what it says should follow. Reporting an event without those stays a topic.
The fourth slot was dropped from the test. Naming a problem turned out to be present in 83% of everything we read, and something that common cannot tell one thing from another. It is still recorded; it no longer decides.
Judgement has to be quoted. When the model marks a claim as carrying a moral judgement, it must return the exact words from the text that carry it. If those words are not in the text, the judgement is discarded and the mismatch is counted. That check has already caught the model once.
One narrative moved out. We classified "Ukrainian strikes on Russian logistics as legitimate defence" as a Ukrainian framing. Measured on 9 September 2026: of its 155 links, 127 already sat under two neutral topics, and of the 29 claims we could evaluate, 4 carried the frame in their own text. Ukrainian outlets report these strikes as events, not as arguments. It is a topic now.
Under the hood
Pre-rule links checked. Links added before the membership rule existed have now been run against it: of 254 such links, 36 pass. Measured 16 September 2026. That was the second of the two gaps named in v0.5.0. The first one stands.
Why it matters
A framing is not a source. Reuters repeating a Russian ministry statement is still that statement; a Ukrainian outlet reporting a strike is not making an argument about it. The test reads the claim, never the byline, and that is the part most of this work goes into.
The quote requirement is the same idea turned on ourselves. A model can call anything a judgement. Making it show the words means a reader can check the call, and means we find out when it invents one.
Known gaps
Narratives are still defined by hand and do not emerge from the data. Framings are thin by design: most war reporting is reporting, not framing, and a page with a published rule and nothing that met it is the honest state.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.6.0-beta
SEP 17, 2026
A rule you can read, and a check that catches us
Eight days since v0.5.0. The narrative layer got the part it was missing: a second stage that reads the claim itself and decides whether it carries a frame or only reports an event. This entry is the rule.
What's new
A membership rule in three parts. A claim belongs to a framing when its own text carries at least two of three things: who it holds responsible, what judgement it makes, and what it says should follow. Reporting an event without those stays a topic.
The fourth slot was dropped from the test. Naming a problem turned out to be present in 83% of everything we read, and something that common cannot tell one thing from another. It is still recorded; it no longer decides.
Judgement has to be quoted. When the model marks a claim as carrying a moral judgement, it must return the exact words from the text that carry it. If those words are not in the text, the judgement is discarded and the mismatch is counted. That check has already caught the model once.
One narrative moved out. We classified "Ukrainian strikes on Russian logistics as legitimate defence" as a Ukrainian framing. Measured on 9 September 2026: of its 155 links, 127 already sat under two neutral topics, and of the 29 claims we could evaluate, 4 carried the frame in their own text. Ukrainian outlets report these strikes as events, not as arguments. It is a topic now.
Under the hood
Pre-rule links checked. Links added before the membership rule existed have now been run against it: of 254 such links, 36 pass. Measured 16 September 2026. That was the second of the two gaps named in v0.5.0. The first one stands.
Why it matters
A framing is not a source. Reuters repeating a Russian ministry statement is still that statement; a Ukrainian outlet reporting a strike is not making an argument about it. The test reads the claim, never the byline, and that is the part most of this work goes into.
The quote requirement is the same idea turned on ourselves. A model can call anything a judgement. Making it show the words means a reader can check the call, and means we find out when it invents one.
Known gaps
Narratives are still defined by hand and do not emerge from the data. Framings are thin by design: most war reporting is reporting, not framing, and a page with a published rule and nothing that met it is the honest state.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.5.0-beta
SEP 9, 2026
Narratives, a membership rule you can read, and the numbers we took out
Nine weeks since v0.4.0. The work moved from tracking what happened to tracking how it is being told. Narrative pages went live. Every link on them now has to pass a written rule to appear. And a set of numbers that looked measured but were not got removed from the product.
What's new
Narrative pages. Twenty-eight narratives: sixteen neutral topics and twelve framings, four Russian, four Ukrainian, two Western, two contested. A neutral topic is what happened. A framing is how one side casts it. The same strike can appear under both, and the point is to see the difference.
A membership rule per narrative. Each narrative carries a written, machine-checkable rule for what belongs to it: theatre, direction of action, required entities. A link that fails the rule does not appear on the page.
Fail-closed. If the check cannot run on a link, the link does not appear. Silence is treated as failure, not as permission.
Ukrainian outlets on their own feeds. Seven publishers moved off aggregator links to their own RSS. The gain is not volume but text: aggregator summaries were the headline repeated back in nine cases out of ten.
Under the hood
Numbers removed. A trend percentage on narrative shifts, a corroboration column, a confidence score shown as a percentage, and a volume counter that was a constant. None of them were computed from data. They are gone from the product rather than corrected, because a number that cannot be recomputed should not be shown.
Volume counting corrected. Most links on neutral narratives were never being counted at all. Fixed and backfilled.
Off-platform backups. The database is dumped weekly to storage outside the hosting provider, verified by size against the source.
Database access audit. Several internal functions were reachable without authentication. Closed.
Why it matters
Most tools in this space promise to tell you what is disinformation. That is a claim about intent, and it cannot be checked from outside. We do something narrower and verifiable: we show the same event under the frames different sides put on it, and we publish the rule that decides what belongs where.
If you disagree with a rule, you can read it and say so. That is the part that is supposed to survive checking.
Known gaps
Narratives are defined by hand and do not yet emerge from the data. Links added before the membership rule existed have not been re-checked against it. Both are named here rather than in a footnote.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.5.0-beta
SEP 9, 2026
Narratives, a membership rule you can read, and the numbers we took out
Nine weeks since v0.4.0. The work moved from tracking what happened to tracking how it is being told. Narrative pages went live. Every link on them now has to pass a written rule to appear. And a set of numbers that looked measured but were not got removed from the product.
What's new
Narrative pages. Twenty-eight narratives: sixteen neutral topics and twelve framings, four Russian, four Ukrainian, two Western, two contested. A neutral topic is what happened. A framing is how one side casts it. The same strike can appear under both, and the point is to see the difference.
A membership rule per narrative. Each narrative carries a written, machine-checkable rule for what belongs to it: theatre, direction of action, required entities. A link that fails the rule does not appear on the page.
Fail-closed. If the check cannot run on a link, the link does not appear. Silence is treated as failure, not as permission.
Ukrainian outlets on their own feeds. Seven publishers moved off aggregator links to their own RSS. The gain is not volume but text: aggregator summaries were the headline repeated back in nine cases out of ten.
Under the hood
Numbers removed. A trend percentage on narrative shifts, a corroboration column, a confidence score shown as a percentage, and a volume counter that was a constant. None of them were computed from data. They are gone from the product rather than corrected, because a number that cannot be recomputed should not be shown.
Volume counting corrected. Most links on neutral narratives were never being counted at all. Fixed and backfilled.
Off-platform backups. The database is dumped weekly to storage outside the hosting provider, verified by size against the source.
Database access audit. Several internal functions were reachable without authentication. Closed.
Why it matters
Most tools in this space promise to tell you what is disinformation. That is a claim about intent, and it cannot be checked from outside. We do something narrower and verifiable: we show the same event under the frames different sides put on it, and we publish the rule that decides what belongs where.
If you disagree with a rule, you can read it and say so. That is the part that is supposed to survive checking.
Known gaps
Narratives are defined by hand and do not yet emerge from the data. Links added before the membership rule existed have not been re-checked against it. Both are named here rather than in a footnote.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.5.0-beta
SEP 9, 2026
Narratives, a membership rule you can read, and the numbers we took out
Nine weeks since v0.4.0. The work moved from tracking what happened to tracking how it is being told. Narrative pages went live. Every link on them now has to pass a written rule to appear. And a set of numbers that looked measured but were not got removed from the product.
What's new
Narrative pages. Twenty-eight narratives: sixteen neutral topics and twelve framings, four Russian, four Ukrainian, two Western, two contested. A neutral topic is what happened. A framing is how one side casts it. The same strike can appear under both, and the point is to see the difference.
A membership rule per narrative. Each narrative carries a written, machine-checkable rule for what belongs to it: theatre, direction of action, required entities. A link that fails the rule does not appear on the page.
Fail-closed. If the check cannot run on a link, the link does not appear. Silence is treated as failure, not as permission.
Ukrainian outlets on their own feeds. Seven publishers moved off aggregator links to their own RSS. The gain is not volume but text: aggregator summaries were the headline repeated back in nine cases out of ten.
Under the hood
Numbers removed. A trend percentage on narrative shifts, a corroboration column, a confidence score shown as a percentage, and a volume counter that was a constant. None of them were computed from data. They are gone from the product rather than corrected, because a number that cannot be recomputed should not be shown.
Volume counting corrected. Most links on neutral narratives were never being counted at all. Fixed and backfilled.
Off-platform backups. The database is dumped weekly to storage outside the hosting provider, verified by size against the source.
Database access audit. Several internal functions were reachable without authentication. Closed.
Why it matters
Most tools in this space promise to tell you what is disinformation. That is a claim about intent, and it cannot be checked from outside. We do something narrower and verifiable: we show the same event under the frames different sides put on it, and we publish the rule that decides what belongs where.
If you disagree with a rule, you can read it and say so. That is the part that is supposed to survive checking.
Known gaps
Narratives are defined by hand and do not yet emerge from the data. Links added before the membership rule existed have not been re-checked against it. Both are named here rather than in a footnote.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.4.0-beta
JUL 4, 2026
Compare, weekly reports, and an editorial floor you can cite
Eight weeks since v0.3.0. The pipeline held at 200+ sources while the work moved up the stack: from collecting events to tracking how the story changes, day over day and week over week. The daily brief got a hard editorial floor. Delivery got more reliable.
What's new
Compare: a day-over-day view of what changed since yesterday. New developments, what dropped off, and how the framing shifted, side by side.
Weekly reports every Sunday. The week's arc in one read: what intensified, what faded, what stayed contested.
Daily email digest. The day's key developments in your inbox at dispatch, linking straight to the full brief.
Contradiction handling in the brief. When Russian and Ukrainian sources disagree on a fact, the brief shows both with attribution instead of picking one or averaging them out.
Under the hood
Editorial floor. Every brief is generated against three written rules: civilian harm is attributed to the source that reported it, who did what to whom is never merged, and a contested claim is labelled as a claim rather than stated as fact. The rules are enforced in the generator's instructions and checked by hand every morning. An automated pre-send check is not built yet; when it ships, it will appear here.
Data isolation. Row-level security audited and tightened across the app.
Cron monitoring. Every scheduled run logs itself, and missed runs raise an alert.
Delivery discipline. Email now ships a clean titles-only digest, and social posts go out on a fixed schedule across all four channels.
Why it matters
A single day's brief is a snapshot. Compare and the weekly turn it into a timeline: you see when a narrative starts moving, not just where it landed. That is the difference between reading the news and reading the shift.
The editorial floor is the quieter change, and the more important one. An OSINT brief lives or dies on whether you can cite it. Marking claims as claims, attributing civilian harm to the source that reported it, and refusing false balance is what makes the brief something you can put in front of someone else.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.4.0-beta
JUL 4, 2026
Compare, weekly reports, and an editorial floor you can cite
Eight weeks since v0.3.0. The pipeline held at 200+ sources while the work moved up the stack: from collecting events to tracking how the story changes, day over day and week over week. The daily brief got a hard editorial floor. Delivery got more reliable.
What's new
Compare: a day-over-day view of what changed since yesterday. New developments, what dropped off, and how the framing shifted, side by side.
Weekly reports every Sunday. The week's arc in one read: what intensified, what faded, what stayed contested.
Daily email digest. The day's key developments in your inbox at dispatch, linking straight to the full brief.
Contradiction handling in the brief. When Russian and Ukrainian sources disagree on a fact, the brief shows both with attribution instead of picking one or averaging them out.
Under the hood
Editorial floor. Every brief is generated against three written rules: civilian harm is attributed to the source that reported it, who did what to whom is never merged, and a contested claim is labelled as a claim rather than stated as fact. The rules are enforced in the generator's instructions and checked by hand every morning. An automated pre-send check is not built yet; when it ships, it will appear here.
Data isolation. Row-level security audited and tightened across the app.
Cron monitoring. Every scheduled run logs itself, and missed runs raise an alert.
Delivery discipline. Email now ships a clean titles-only digest, and social posts go out on a fixed schedule across all four channels.
Why it matters
A single day's brief is a snapshot. Compare and the weekly turn it into a timeline: you see when a narrative starts moving, not just where it landed. That is the difference between reading the news and reading the shift.
The editorial floor is the quieter change, and the more important one. An OSINT brief lives or dies on whether you can cite it. Marking claims as claims, attributing civilian harm to the source that reported it, and refusing false balance is what makes the brief something you can put in front of someone else.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.4.0-beta
JUL 4, 2026
Compare, weekly reports, and an editorial floor you can cite
Eight weeks since v0.3.0. The pipeline held at 200+ sources while the work moved up the stack: from collecting events to tracking how the story changes, day over day and week over week. The daily brief got a hard editorial floor. Delivery got more reliable.
What's new
Compare: a day-over-day view of what changed since yesterday. New developments, what dropped off, and how the framing shifted, side by side.
Weekly reports every Sunday. The week's arc in one read: what intensified, what faded, what stayed contested.
Daily email digest. The day's key developments in your inbox at dispatch, linking straight to the full brief.
Contradiction handling in the brief. When Russian and Ukrainian sources disagree on a fact, the brief shows both with attribution instead of picking one or averaging them out.
Under the hood
Editorial floor. Every brief is generated against three written rules: civilian harm is attributed to the source that reported it, who did what to whom is never merged, and a contested claim is labelled as a claim rather than stated as fact. The rules are enforced in the generator's instructions and checked by hand every morning. An automated pre-send check is not built yet; when it ships, it will appear here.
Data isolation. Row-level security audited and tightened across the app.
Cron monitoring. Every scheduled run logs itself, and missed runs raise an alert.
Delivery discipline. Email now ships a clean titles-only digest, and social posts go out on a fixed schedule across all four channels.
Why it matters
A single day's brief is a snapshot. Compare and the weekly turn it into a timeline: you see when a narrative starts moving, not just where it landed. That is the difference between reading the news and reading the shift.
The editorial floor is the quieter change, and the more important one. An OSINT brief lives or dies on whether you can cite it. Marking claims as claims, attributing civilian harm to the source that reported it, and refusing false balance is what makes the brief something you can put in front of someone else.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.3.0-beta
MAY 11, 2026
Pipeline reaches 200+ sources, brief scope locked to RU-UA
Five weeks since v0.2.0. The pipeline grew from 145 to 200+ open sources. Brief scope got tightened after Middle East noise started creeping in. Feed got rebuilt with cursor pagination and timezone-aware timestamps. Social pipeline rewired to attach images natively across all four channels. Cron infrastructure now self-monitors.
What's new
— 200+ open sources across 3 languages, ingested every 30 minutes
— Feed rebuilt: cursor pagination, infinite scroll, date dividers, daily brief card inline at 05:00 UTC
— Timezone setting in /settings. All dashboard timestamps respect your local time now
— Source classification with reliability badges, visible everywhere events appear
— Brief scope locked strictly to Russia-Ukraine. No more Middle East or Iran content slipping through
Under the hood
— Pre-ingestion filter chain v2.1 (keyword filter plus source-specific classifier). Drops scope-irrelevant content before it hits the analyzer, keeping costs predictable
— Cron heartbeat infrastructure. Every cron run logs itself. Watchdog alerts when expected runs don't happen
— Social image attachment architecturally rewired. Native uploads to Twitter, Bluesky, Telegram, Discord instead of relying on OG previews
— Admin dashboard now has unified Sources tab showing every source with live health status
— Welcome email reliability fix. New users now consistently get the welcome message
— Supabase upgraded to Pro tier for compute headroom after a May 9 capacity incident
Why it matters
200+ sources isn't bragging rights. It's the floor where contradiction detection starts to actually work. With three or four sources on a single event, you can spot when Russian milbloggers and Western agencies disagree on facts, not framing. Below that, you're mostly looking at echoes.
The scope lock matters more than the count. A brief that quietly drifts into Iran or Gaza loses the reader fast. Defense in depth (classifier and generator both enforce RU-UA only) means the brief stays the brief.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.3.0-beta
MAY 11, 2026
Pipeline reaches 200+ sources, brief scope locked to RU-UA
Five weeks since v0.2.0. The pipeline grew from 145 to 200+ open sources. Brief scope got tightened after Middle East noise started creeping in. Feed got rebuilt with cursor pagination and timezone-aware timestamps. Social pipeline rewired to attach images natively across all four channels. Cron infrastructure now self-monitors.
What's new
— 200+ open sources across 3 languages, ingested every 30 minutes
— Feed rebuilt: cursor pagination, infinite scroll, date dividers, daily brief card inline at 05:00 UTC
— Timezone setting in /settings. All dashboard timestamps respect your local time now
— Source classification with reliability badges, visible everywhere events appear
— Brief scope locked strictly to Russia-Ukraine. No more Middle East or Iran content slipping through
Under the hood
— Pre-ingestion filter chain v2.1 (keyword filter plus source-specific classifier). Drops scope-irrelevant content before it hits the analyzer, keeping costs predictable
— Cron heartbeat infrastructure. Every cron run logs itself. Watchdog alerts when expected runs don't happen
— Social image attachment architecturally rewired. Native uploads to Twitter, Bluesky, Telegram, Discord instead of relying on OG previews
— Admin dashboard now has unified Sources tab showing every source with live health status
— Welcome email reliability fix. New users now consistently get the welcome message
— Supabase upgraded to Pro tier for compute headroom after a May 9 capacity incident
Why it matters
200+ sources isn't bragging rights. It's the floor where contradiction detection starts to actually work. With three or four sources on a single event, you can spot when Russian milbloggers and Western agencies disagree on facts, not framing. Below that, you're mostly looking at echoes.
The scope lock matters more than the count. A brief that quietly drifts into Iran or Gaza loses the reader fast. Defense in depth (classifier and generator both enforce RU-UA only) means the brief stays the brief.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.3.0-beta
MAY 11, 2026
Pipeline reaches 200+ sources, brief scope locked to RU-UA
Five weeks since v0.2.0. The pipeline grew from 145 to 200+ open sources. Brief scope got tightened after Middle East noise started creeping in. Feed got rebuilt with cursor pagination and timezone-aware timestamps. Social pipeline rewired to attach images natively across all four channels. Cron infrastructure now self-monitors.
What's new
— 200+ open sources across 3 languages, ingested every 30 minutes
— Feed rebuilt: cursor pagination, infinite scroll, date dividers, daily brief card inline at 05:00 UTC
— Timezone setting in /settings. All dashboard timestamps respect your local time now
— Source classification with reliability badges, visible everywhere events appear
— Brief scope locked strictly to Russia-Ukraine. No more Middle East or Iran content slipping through
Under the hood
— Pre-ingestion filter chain v2.1 (keyword filter plus source-specific classifier). Drops scope-irrelevant content before it hits the analyzer, keeping costs predictable
— Cron heartbeat infrastructure. Every cron run logs itself. Watchdog alerts when expected runs don't happen
— Social image attachment architecturally rewired. Native uploads to Twitter, Bluesky, Telegram, Discord instead of relying on OG previews
— Admin dashboard now has unified Sources tab showing every source with live health status
— Welcome email reliability fix. New users now consistently get the welcome message
— Supabase upgraded to Pro tier for compute headroom after a May 9 capacity incident
Why it matters
200+ sources isn't bragging rights. It's the floor where contradiction detection starts to actually work. With three or four sources on a single event, you can spot when Russian milbloggers and Western agencies disagree on facts, not framing. Below that, you're mostly looking at echoes.
The scope lock matters more than the count. A brief that quietly drifts into Iran or Gaza loses the reader fast. Defense in depth (classifier and generator both enforce RU-UA only) means the brief stays the brief.
Try it: app.osnt.in/brief/latest
See the pipeline live: app.osnt.in/feed
v0.2.0-beta
APR 8, 2026
Pipeline 4x Expansion — 145+ Open Sources
Major pipeline expansion week. The intelligence pipeline grew from ~35 to 145+ open sources, with new metrics display, click-through to original sources, and infrastructure improvements throughout the brief generator.
What's new
— 145+ open sources now monitored across the pipeline
— 100+ Telegram channels added across three languages — including Russian milbloggers (6 channels spanning Kremlin-aligned and independent operators), Ukrainian military and combat correspondents (4 channels covering strategic communications and frontline journalism), Ukrainian media (4 mainstream outlets), and Russian independent voices (1 exile-affiliated channel).
— 45+ RSS feeds expanded with Western defense and policy outlets
— Hybrid pipeline metrics in brief footer — shows both pipeline configuration (145+) and active sources this week (real count from the last 7 days)
— Click any event in the live feed to open its original source in a new tab
— Daily brief continues to ship at 05:00 UTC with executive summary, key developments, narrative shifts, and signals to watch
Under the hood
— Postgres RPC function for accurate active sources counting
— Counter logic now correctly combines event sources with distinct Telegram channels (previous version undercounted by excluding Telegram entirely)
— Display logic updated across brief footer, OG image, and all social posts
— Build pipeline hardened with deployment checklists and pre-deploy audits
— Critical payment regression caught and fixed during pre-deploy review
Why it matters
More sources means fewer blind spots and stronger cross-language framing analysis. The metrics display change is something we're particularly happy with — most platforms either overstate ("145+ sources!") or hide details ("X events processed today"). Showing both pipeline size and active-this-week count is the honest middle ground.
Try it — app.osnt.in/brief/latest
See the pipeline live — app.osnt.in/feed
v0.2.0-beta
APR 8, 2026
Pipeline 4x Expansion — 145+ Open Sources
Major pipeline expansion week. The intelligence pipeline grew from ~35 to 145+ open sources, with new metrics display, click-through to original sources, and infrastructure improvements throughout the brief generator.
What's new
— 145+ open sources now monitored across the pipeline
— 100+ Telegram channels added across three languages — including Russian milbloggers (6 channels spanning Kremlin-aligned and independent operators), Ukrainian military and combat correspondents (4 channels covering strategic communications and frontline journalism), Ukrainian media (4 mainstream outlets), and Russian independent voices (1 exile-affiliated channel).
— 45+ RSS feeds expanded with Western defense and policy outlets
— Hybrid pipeline metrics in brief footer — shows both pipeline configuration (145+) and active sources this week (real count from the last 7 days)
— Click any event in the live feed to open its original source in a new tab
— Daily brief continues to ship at 05:00 UTC with executive summary, key developments, narrative shifts, and signals to watch
Under the hood
— Postgres RPC function for accurate active sources counting
— Counter logic now correctly combines event sources with distinct Telegram channels (previous version undercounted by excluding Telegram entirely)
— Display logic updated across brief footer, OG image, and all social posts
— Build pipeline hardened with deployment checklists and pre-deploy audits
— Critical payment regression caught and fixed during pre-deploy review
Why it matters
More sources means fewer blind spots and stronger cross-language framing analysis. The metrics display change is something we're particularly happy with — most platforms either overstate ("145+ sources!") or hide details ("X events processed today"). Showing both pipeline size and active-this-week count is the honest middle ground.
Try it — app.osnt.in/brief/latest
See the pipeline live — app.osnt.in/feed
v0.2.0-beta
APR 8, 2026
Pipeline 4x Expansion — 145+ Open Sources
Major pipeline expansion week. The intelligence pipeline grew from ~35 to 145+ open sources, with new metrics display, click-through to original sources, and infrastructure improvements throughout the brief generator.
What's new
— 145+ open sources now monitored across the pipeline
— 100+ Telegram channels added across three languages — including Russian milbloggers (6 channels spanning Kremlin-aligned and independent operators), Ukrainian military and combat correspondents (4 channels covering strategic communications and frontline journalism), Ukrainian media (4 mainstream outlets), and Russian independent voices (1 exile-affiliated channel).
— 45+ RSS feeds expanded with Western defense and policy outlets
— Hybrid pipeline metrics in brief footer — shows both pipeline configuration (145+) and active sources this week (real count from the last 7 days)
— Click any event in the live feed to open its original source in a new tab
— Daily brief continues to ship at 05:00 UTC with executive summary, key developments, narrative shifts, and signals to watch
Under the hood
— Postgres RPC function for accurate active sources counting
— Counter logic now correctly combines event sources with distinct Telegram channels (previous version undercounted by excluding Telegram entirely)
— Display logic updated across brief footer, OG image, and all social posts
— Build pipeline hardened with deployment checklists and pre-deploy audits
— Critical payment regression caught and fixed during pre-deploy review
Why it matters
More sources means fewer blind spots and stronger cross-language framing analysis. The metrics display change is something we're particularly happy with — most platforms either overstate ("145+ sources!") or hide details ("X events processed today"). Showing both pipeline size and active-this-week count is the honest middle ground.
Try it — app.osnt.in/brief/latest
See the pipeline live — app.osnt.in/feed
v0.1.0-beta
APR 1, 2026
Initial Beta
OSNT.IN beta is live. The first release ships the core promise — structured daily intelligence on the Russia-Ukraine conflict, generated from open sources, delivered every morning at 05:00 UTC.
What's in this release
— Daily intelligence brief generated automatically every morning
— Multi-source ingestion: ~35 sources across Telegram channels, RSS feeds, conflict event databases (GDELT), satellite thermal data (NASA FIRMS), and sanctions tracking (OpenSanctions)
— Cross-language coverage across Western, Russian, and Ukrainian media
— Source classification system with reliability badges
— Live event feed with severity filtering
— Public brief sharing via /brief/[date] URLs with auto-generated OG images
— Daily auto-posting to Twitter, Bluesky, Telegram, and Discord at 05:00 UTC
— Pro tier ($29/month) with 7-day free trial
— Crypto payment support (USDT TRC-20)
Why it matters
Most people monitoring this conflict spend hours scrolling Telegram and news sites trying to piece together what actually happened. OSNT.IN compresses that into a single morning read, with sources attributed and credibility tagged.
This is beta, which means: the product works, you get real value daily, but expect rapid iteration as we expand the pipeline and add depth features in the coming weeks.
Try it — app.osnt.in/brief/latest
v0.1.0-beta
APR 1, 2026
Initial Beta
OSNT.IN beta is live. The first release ships the core promise — structured daily intelligence on the Russia-Ukraine conflict, generated from open sources, delivered every morning at 05:00 UTC.
What's in this release
— Daily intelligence brief generated automatically every morning
— Multi-source ingestion: ~35 sources across Telegram channels, RSS feeds, conflict event databases (GDELT), satellite thermal data (NASA FIRMS), and sanctions tracking (OpenSanctions)
— Cross-language coverage across Western, Russian, and Ukrainian media
— Source classification system with reliability badges
— Live event feed with severity filtering
— Public brief sharing via /brief/[date] URLs with auto-generated OG images
— Daily auto-posting to Twitter, Bluesky, Telegram, and Discord at 05:00 UTC
— Pro tier ($29/month) with 7-day free trial
— Crypto payment support (USDT TRC-20)
Why it matters
Most people monitoring this conflict spend hours scrolling Telegram and news sites trying to piece together what actually happened. OSNT.IN compresses that into a single morning read, with sources attributed and credibility tagged.
This is beta, which means: the product works, you get real value daily, but expect rapid iteration as we expand the pipeline and add depth features in the coming weeks.
Try it — app.osnt.in/brief/latest
v0.1.0-beta
APR 1, 2026
Initial Beta
OSNT.IN beta is live. The first release ships the core promise — structured daily intelligence on the Russia-Ukraine conflict, generated from open sources, delivered every morning at 05:00 UTC.
What's in this release
— Daily intelligence brief generated automatically every morning
— Multi-source ingestion: ~35 sources across Telegram channels, RSS feeds, conflict event databases (GDELT), satellite thermal data (NASA FIRMS), and sanctions tracking (OpenSanctions)
— Cross-language coverage across Western, Russian, and Ukrainian media
— Source classification system with reliability badges
— Live event feed with severity filtering
— Public brief sharing via /brief/[date] URLs with auto-generated OG images
— Daily auto-posting to Twitter, Bluesky, Telegram, and Discord at 05:00 UTC
— Pro tier ($29/month) with 7-day free trial
— Crypto payment support (USDT TRC-20)
Why it matters
Most people monitoring this conflict spend hours scrolling Telegram and news sites trying to piece together what actually happened. OSNT.IN compresses that into a single morning read, with sources attributed and credibility tagged.
This is beta, which means: the product works, you get real value daily, but expect rapid iteration as we expand the pipeline and add depth features in the coming weeks.
Try it — app.osnt.in/brief/latest
Get Started
Stop Guessing. Start Knowing.
Join analysts and researchers who get structured intelligence on the Russia-Ukraine conflict every morning.
app.osnt.in
200+
OPEN SOURCES
100+
TELEGRAM CHANNELS
100+
RSS FEED
3
LANGUAGES TRACKED
Event activity
Task overview
CRITICAL
HIGH
MEDIUM
Get Started
Stop Guessing. Start Knowing.
Join analysts and researchers who get structured intelligence on the Russia-Ukraine conflict every morning.
app.osnt.in
200+
OPEN SOURCES
100+
TELEGRAM CHANNELS
100+
RSS FEED
3
LANGUAGES TRACKED
Event activity