pub / stories

Top News Aggregator
git clone src.jayvii.de/pub/stories.git
Home | Log | Files | Exports | Refs | RSS

commit 84b9f9a404aaf1fdb25519921e7ea1b917ca3efd
Author: JayVii <jayvii[AT]posteo[DOT]de>
Date:   Sun, 13 Sep 2026 17:14:19 +0200

initial commit

Diffstat:
Aassets/css/custom.css | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aassets/css/simple.min.css | 1+
Aassets/favicon.ico | 0
Aassets/favicon.png | 0
Aassets/favicon_128.png | 0
Aassets/favicon_144.png | 0
Aassets/favicon_16.png | 0
Aassets/favicon_168.png | 0
Aassets/favicon_192.png | 0
Aassets/favicon_256.png | 0
Aassets/favicon_32.png | 0
Aassets/favicon_48.png | 0
Aassets/favicon_64.png | 0
Aassets/favicon_96.png | 0
Aassets/manifest.json | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aindex.tt | 101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aperlanetrc.yaml | 26++++++++++++++++++++++++++
17 files changed, 247 insertions(+), 0 deletions(-)

diff --git a/assets/css/custom.css b/assets/css/custom.css @@ -0,0 +1,58 @@ +body { + display: initial; +} + +main { + width: 100%; + max-width: 1080px; + margin-left: auto; + margin-right: auto; + display: flex; + flex-wrap: wrap; +} +footer > * { + max-width: 1080px; + margin-left: auto !important; + margin-right: auto !important; + text-align: left; +} + +section { + flex: calc(50% - 2em); + background: var(--accent-bg); + margin: 1em; + border-radius: 10px; + margin-top: 0px; +} + +/* Only show first paragraph of article content (typically the summary) */ +.article_content *:nth-child(n + 2) +{ + display: none; +} +.article_content { + margin-bottom: 1.5em; + -webkit-box-orient: vertical; + display: -webkit-box; + -webkit-line-clamp: 5; + overflow: hidden; +} + +/* Article content should not be weighted or have any styling */ +.article_content > * { + font-size: inherit; + font-weight: normal; + font-style: normal; + line-height: inherit; +} +/* Hide iframes and images in case they are not filtered out */ +.article_content iframe, +.article_content img, +.article_content figcaption +{ + display: none; +} + +p { + margin: 0px; +} diff --git a/assets/css/simple.min.css b/assets/css/simple.min.css @@ -0,0 +1 @@ +:root,::backdrop{--sans-font:-apple-system,BlinkMacSystemFont,"Avenir Next",Avenir,"Nimbus Sans L",Roboto,"Noto Sans","Segoe UI",Arial,Helvetica,"Helvetica Neue",sans-serif;--mono-font:Consolas,Menlo,Monaco,"Andale Mono","Ubuntu Mono",monospace;--standard-border-radius:5px;--bg:#fff;--accent-bg:#f5f7ff;--text:#212121;--text-light:#585858;--border:#898ea4;--accent:#0d47a1;--accent-hover:#1266e2;--accent-text:var(--bg);--code:#d81b60;--preformatted:#444;--marked:#fd3;--disabled:#efefef}@media (prefers-color-scheme:dark){:root,::backdrop{color-scheme:dark;--bg:#212121;--accent-bg:#2b2b2b;--text:#dcdcdc;--text-light:#ababab;--accent:#ffb300;--accent-hover:#ffe099;--accent-text:var(--bg);--code:#f06292;--preformatted:#ccc;--disabled:#111}img,video{opacity:.8}}*,:before,:after{box-sizing:border-box}textarea,select,input,progress{-webkit-appearance:none;-moz-appearance:none;appearance:none}html{font-family:var(--sans-font);scroll-behavior:smooth}body{color:var(--text);background-color:var(--bg);grid-template-columns:1fr min(45rem,90%) 1fr;margin:0;font-size:1.15rem;line-height:1.5;display:grid}body>*{grid-column:2}body>header{background-color:var(--accent-bg);border-bottom:1px solid var(--border);text-align:center;grid-column:1/-1;padding:0 .5rem 2rem}body>header>:only-child{margin-block-start:2rem}body>header h1{max-width:1200px;margin:1rem auto}body>header p{max-width:40rem;margin:1rem auto}main{padding-top:1.5rem}body>footer{color:var(--text-light);text-align:center;border-top:1px solid var(--border);margin-top:4rem;padding:2rem 1rem 1.5rem;font-size:.9rem}h1{font-size:3rem}h2{margin-top:3rem;font-size:2.6rem}h3{margin-top:3rem;font-size:2rem}h4{font-size:1.44rem}h5{font-size:1.15rem}h6{font-size:.96rem}p{margin:1.5rem 0}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3{line-height:1.1}@media only screen and (width<=720px){h1{font-size:2.5rem}h2{font-size:2.1rem}h3{font-size:1.75rem}h4{font-size:1.25rem}}a,a:visited{color:var(--accent)}a:hover{text-decoration:none}button,.button,a.button,input[type=submit],input[type=reset],input[type=button],label[type=button]{border:1px solid var(--accent);background-color:var(--accent);color:var(--accent-text);padding:.5rem .9rem;line-height:normal;text-decoration:none}.button[aria-disabled=true],input:disabled,textarea:disabled,select:disabled,button[disabled]{cursor:not-allowed;background-color:var(--disabled);border-color:var(--disabled);color:var(--text-light)}input[type=range]{padding:0}abbr[title]{cursor:help;text-decoration-line:underline;text-decoration-style:dotted}button:enabled:hover,.button:not([aria-disabled=true]):hover,input[type=submit]:enabled:hover,input[type=reset]:enabled:hover,input[type=button]:enabled:hover,label[type=button]:hover{background-color:var(--accent-hover);border-color:var(--accent-hover);cursor:pointer}.button:focus-visible,button:focus-visible:where(:enabled),input:enabled:focus-visible:where([type=submit],[type=reset],[type=button]){outline:2px solid var(--accent);outline-offset:1px}header>nav{padding:1rem 0 0;font-size:1rem;line-height:2}header>nav ul,header>nav ol{flex-flow:wrap;place-content:space-around center;align-items:center;margin:0;padding:0;list-style-type:none;display:flex}header>nav ul li,header>nav ol li{display:inline-block}header>nav a,header>nav a:visited{border:1px solid var(--border);border-radius:var(--standard-border-radius);color:var(--text);margin:0 .5rem 1rem;padding:.1rem 1rem;text-decoration:none;display:inline-block}header>nav a:hover,header>nav a.current,header>nav a[aria-current=page]{border-color:var(--accent);color:var(--accent);cursor:pointer}@media only screen and (width<=720px){header>nav a{border:none;padding:0;line-height:1;text-decoration:underline}}aside,details,pre,progress{background-color:var(--accent-bg);border:1px solid var(--border);border-radius:var(--standard-border-radius);margin-bottom:1rem}aside{float:right;width:30%;margin-inline-start:15px;padding:0 15px;font-size:1rem}[dir=rtl] aside{float:left}@media only screen and (width<=720px){aside{float:none;width:100%;margin-inline-start:0}}article,fieldset,dialog{border:1px solid var(--border);border-radius:var(--standard-border-radius);margin-bottom:1rem;padding:1rem}article h2:first-child,section h2:first-child,article h3:first-child,section h3:first-child{margin-top:1rem}section{border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin:3rem 0;padding:2rem 1rem}section+section,section:first-child{border-top:0;padding-top:0}section+section{margin-top:0}section:last-child{border-bottom:0;padding-bottom:0}details{padding:.7rem 1rem}summary{cursor:pointer;word-break:break-all;margin:-.7rem -1rem;padding:.7rem 1rem;font-weight:700}details[open]>summary+*{margin-top:0}details[open]>summary{margin-bottom:.5rem}details[open]>:last-child{margin-bottom:0}table{border-collapse:collapse;margin:1.5rem 0}figure>table{width:max-content;margin:0}td,th{border:1px solid var(--border);text-align:start;padding:.5rem}th{background-color:var(--accent-bg);font-weight:700}tr:nth-child(2n){background-color:var(--accent-bg)}table caption{margin-bottom:.5rem;font-weight:700}textarea,select,input,button,.button{font-size:inherit;border-radius:var(--standard-border-radius);box-shadow:none;max-width:100%;margin-bottom:.5rem;padding:.5rem;font-family:inherit;display:inline-block}textarea,select,input{color:var(--text);background-color:var(--bg);border:1px solid var(--border)}label{display:block}textarea:not([cols]){width:100%}select:not([multiple]){background-image:linear-gradient(45deg,transparent 49%,var(--text)51%),linear-gradient(135deg,var(--text)51%,transparent 49%);background-position:calc(100% - 15px),calc(100% - 10px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-inline-end:25px}[dir=rtl] select:not([multiple]){background-position:10px,15px}input[type=checkbox],input[type=radio]{vertical-align:middle;width:min-content;position:relative}input[type=checkbox]+label,input[type=radio]+label{display:inline-block}input[type=radio]{border-radius:100%}input[type=checkbox]:checked,input[type=radio]:checked{background-color:var(--accent)}input[type=checkbox]:checked:after{content:" ";border-right:solid var(--bg).08em;border-bottom:solid var(--bg).08em;background-color:#0000;border-radius:0;width:.18em;height:.32em;font-size:1.8em;position:absolute;top:.05em;left:.17em;transform:rotate(45deg)}input[type=radio]:checked:after{content:" ";background-color:var(--bg);border-radius:100%;width:.25em;height:.25em;font-size:32px;position:absolute;top:.125em;left:.125em}@media only screen and (width<=720px){textarea,select,input{width:100%}}input[type=color]{height:2.5rem;padding:.2rem}input[type=file]{border:0}hr{background:var(--border);border:none;height:1px;margin:1rem auto}mark{border-radius:var(--standard-border-radius);background-color:var(--marked);color:#000;padding:2px 5px}mark a{color:#0d47a1}img,video{border-radius:var(--standard-border-radius);max-width:100%;height:auto}figure{margin:0;display:block;overflow-x:auto}figure>img,figure>picture>img{margin-inline:auto;display:block}figcaption{text-align:center;color:var(--text-light);margin-block:1rem;font-size:.9rem}blockquote{border-inline-start:.35rem solid var(--accent);color:var(--text-light);margin-block:2rem;margin-inline:2rem 0;padding:.4rem .8rem;font-style:italic}cite{color:var(--text-light);font-size:.9rem;font-style:normal}dt{color:var(--text-light)}code,pre,pre span,kbd,samp{font-family:var(--mono-font);color:var(--code)}kbd{color:var(--preformatted);border:1px solid var(--preformatted);border-bottom:3px solid var(--preformatted);border-radius:var(--standard-border-radius);padding:.1rem .4rem}pre{color:var(--preformatted);max-width:100%;padding:1rem 1.4rem;overflow:auto}pre code{color:var(--preformatted);background:0 0;margin:0;padding:0}progress{width:100%}progress:indeterminate{background-color:var(--accent-bg)}progress::-webkit-progress-bar{border-radius:var(--standard-border-radius);background-color:var(--accent-bg)}progress::-webkit-progress-value{border-radius:var(--standard-border-radius);background-color:var(--accent)}progress::-moz-progress-bar{border-radius:var(--standard-border-radius);background-color:var(--accent);transition-property:width;transition-duration:.3s}progress:indeterminate::-moz-progress-bar{background-color:var(--accent-bg)}dialog{max-width:40rem;margin:auto}dialog::backdrop{background-color:var(--bg);opacity:.8}@media only screen and (width<=720px){dialog{max-width:100%;margin:auto 1em}}sup,sub{vertical-align:baseline;position:relative}sup{top:-.4em}sub{top:.3em}.notice{background:var(--accent-bg);border:2px solid var(--border);border-radius:var(--standard-border-radius);margin:2rem 0;padding:1.5rem} diff --git a/assets/favicon.ico b/assets/favicon.ico Binary files differ. diff --git a/assets/favicon.png b/assets/favicon.png Binary files differ. diff --git a/assets/favicon_128.png b/assets/favicon_128.png Binary files differ. diff --git a/assets/favicon_144.png b/assets/favicon_144.png Binary files differ. diff --git a/assets/favicon_16.png b/assets/favicon_16.png Binary files differ. diff --git a/assets/favicon_168.png b/assets/favicon_168.png Binary files differ. diff --git a/assets/favicon_192.png b/assets/favicon_192.png Binary files differ. diff --git a/assets/favicon_256.png b/assets/favicon_256.png Binary files differ. diff --git a/assets/favicon_32.png b/assets/favicon_32.png Binary files differ. diff --git a/assets/favicon_48.png b/assets/favicon_48.png Binary files differ. diff --git a/assets/favicon_64.png b/assets/favicon_64.png Binary files differ. diff --git a/assets/favicon_96.png b/assets/favicon_96.png Binary files differ. diff --git a/assets/manifest.json b/assets/manifest.json @@ -0,0 +1,61 @@ +{ + "name":"Stories", + "short_name":"Stories", + "start_url":"/", + "display":"standalone", + "scope":"/", + "background_color":"#1d1e20", + "description":"Current top stories.", + "icons":[ + { + "src":"/assets/favicon_16.png", + "sizes":"16x16", + "type":"image/png" + }, + { + "src":"/assets/favicon_32.png", + "sizes":"32x32", + "type":"image/png" + }, + { + "src":"/assets/favicon_48.png", + "sizes":"48x48", + "type":"image/png" + }, + { + "src":"/assets/favicon_64.png", + "sizes":"64x64", + "type":"image/png" + }, + { + "src":"/assets/favicon_72.png", + "sizes":"72x72", + "type":"image/png" + }, + { + "src":"/assets/favicon_96.png", + "sizes":"96x96", + "type":"image/png" + }, + { + "src":"/assets/favicon_144.png", + "sizes":"144x144", + "type":"image/png" + }, + { + "src":"/assets/favicon_168.png", + "sizes":"168x168", + "type":"image/png" + }, + { + "src":"/assets/favicon_192.png", + "sizes":"192x192", + "type":"image/png" + }, + { + "src":"/assets/favicon_256.png", + "sizes":"256x256", + "type":"image/png" + } + ] +} diff --git a/index.tt b/index.tt @@ -0,0 +1,101 @@ +<!-- SPDX-License-Identifier: AGPL-3.0-or-later + SPDX-FileCopyrightText: 2021-2026 JayVii <jayvii[AT]posteo[DOT]de> +--> + +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>[% feed.title %]</title> + <meta name="description" content="[% feed.description %]"> + [% IF feed.author %] + <meta name="author" content="[% feed.author %]"> + [% END %] + <link rel="icon" type="image/png" href="assets/favicon.png"> + <link rel="icon" type="image/png" sizes="16x16" + href="assets/favicon_16.png" + /> + <link rel="icon" type="image/png" sizes="32x32" + href="assets/favicon_32.png" + /> + <link rel="icon" type="image/png" sizes="64x64" + href="assets/favicon_64.png" + /> + <link rel="icon" type="image/png" sizes="128x128" + href="assets/favicon_128.png" + /> + <link rel="apple-touch-icon" href="assets/favicon.png"> + <link rel="stylesheet" type="text/css" href="assets/css/simple.min.css"> + <link rel="stylesheet" type="text/css" href="assets/css/custom.css"> + href="<!--XML-->" + /> + <link crossorigin="use-credentials" rel="manifest" href="assets/manifest.json"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="robots" content="noindex"> + </head> + + <body> + + <header> + <nav> + <!-- "Overview" --> + <a href="/">Overview</a> + <!-- Privacy Policy --> + <a href="https://www.jayvii.de/privacy/#newsjayviide" target="_blank"> + Privacy + </a> + </nav> + <!-- Feed Title --> + <h1>[% feed.title | html %]</h1> + <p>[% feed.description | html %]</p> + </header> + + <main> + + <!-- Content Entries --> + [% FOREACH entry IN feed.entries %] + <section> + <!-- Headline --> + <h4 style="margin-bottom:5px;"> + <a href="[% entry.link | url | html %]" + target="_blank" + rel="nofollow ugc" + > + [% entry.title | html %] + </a> + </h3> + <!-- Information --> + <div style="width:100%;margin-bottom:1em;"> + [% IF entry.issued %] + <em style="margin-left:0.25em;color:var(--border);"> + [% entry.issued | html %] + </em> + [% END %] + </div> + <!-- Content --> + <div class="article_content"> + [% IF entry.summary.body %] + <!--start-->[% entry.summary.body %]<!--end--> + [% ELSE %] + <!--start-->[% entry.content.body %]<!--end--> + [% END %] + </div> + </section> + [% END %] + + </main> + + <footer> + <h4>Disclaimer:</h4> + <p> + The news headlines, content or attitudes of the editors and authors of + the news outlets, blogs and newspapers featured here do not necessarily + reflect the opinions and attitudes of the operators of this website. + This is a news aggregator together content from many different + sources, but has no influence on the editorial content directly. + </p> + </footer> + + </body> +</html> diff --git a/perlanetrc.yaml b/perlanetrc.yaml @@ -0,0 +1,26 @@ +title: Zeitung +author: + name: "Me" + email: "me@localhost" +entries: 500 +entries_per_feed: 5 +entries_sort_order: "issued" +page: + file: index.html + template: index.tt +feed: + file: /dev/null + format: Atom +feeds: + - title: Tagesschau - Startseite + url: https://www.tagesschau.de/index~rss2.xml + web: https://www.tagesschau.de/ + - title: Zeit - Wichtigste Nachrichten + url: https://newsfeed.zeit.de/news/nachrichten + web: https://www.zeit.de/news/nachrichten + - title: Süddeutsche Zeitung - Top Themen + url: https://rss.sueddeutsche.de/rss/Topthemen + web: https://www.sueddeutsche.de/ + - title: TAZ - Themen des Tages + url: https://taz.de/Themen-des-Tages/!p15;rss/ + web: https://taz.de/Themen-des-Tages/!p15/