Author SHA1 Message Date
coja 4111c7ac91 [Doc] sudo for dev 2026-05-05 14:25:23 +02:00
coja aa26a3675e [Gobal] added flake8 and did format 2026-05-04 10:33:09 +02:00
coja 732640cf90 [Page] language change fix 2026-05-03 03:18:29 +02:00
coja a3193cb498 [Page] statute strange unicodes 2026-05-03 01:23:39 +02:00
coja 1c0be34ecf [Page] syntax fixes and formating 2026-05-03 01:18:16 +02:00
coja 629c5b02bf [Page] deconference 2026-05-03 00:59:18 +02:00
coja b1f8b7a378 [Makefile] revert 2026-05-03 00:56:13 +02:00
coja 599d143c78 [Jinja2] lang btn and cleanup 2026-05-03 00:55:31 +02:00
coja 0724816c88 [Jinja2] init 2026-05-02 23:18:51 +02:00
12 changed files with 26 additions and 65 deletions
+15
View File
@@ -0,0 +1,15 @@
# AGENTS.md
## Core Workflow
- **Setup**: `make prep` (creates `.venv` and installs `requirements.txt`)
- **Build**: `make build` (runs `atom_gen.py`, `prep.py`, and `build_pages.py`)
- **Events**: Update `dogadjaji.csv` then run `make events` (updates pages and generates images via `image_poster.py`)
- **Development**: `make dev` (starts Nginx using `nginx.dev.conf`) and `make stop` to terminate.
## Technical Details
- **Environment**: Uses a local virtual environment in `.venv`. Always use `./.venv/bin/python` or ensure the venv is activated.
- **Output**: The generated website is stored in the `site/` directory.
- **Data**: Events are driven by `dogadjaji.csv`.
- **Web Server**: Uses Nginx for the development server.
+4 -3
View File
@@ -4,8 +4,8 @@ help:
@echo "Available commands:" @echo "Available commands:"
@echo " make prep - Create venv and install requirements" @echo " make prep - Create venv and install requirements"
@echo " make events - Update site from CSV (build pages + images)" @echo " make events - Update site from CSV (build pages + images)"
@echo " make dev - Start development server" @echo " make dev - Start development server (might need a sudo)"
@echo " make stop - Stop development server" @echo " make stop - Stop development server (might need a sudo)"
@echo " make build - Full website build sequence" @echo " make build - Full website build sequence"
@echo " make help - Show this help message" @echo " make help - Show this help message"
@@ -27,10 +27,11 @@ dev:
nginx -p . -c nginx.dev.conf nginx -p . -c nginx.dev.conf
stop: stop:
nginx -p . -c nginx.dev.conf -s stop nginx -p . -s stop
lint: lint:
./.venv/bin/flake8 . --config .flake8 --exclude .venv ./.venv/bin/flake8 . --config .flake8 --exclude .venv
format: format:
./.venv/bin/black . ./.venv/bin/black .
-1
View File
@@ -32,7 +32,6 @@ PAGES = [
env = Environment(loader=FileSystemLoader("template")) env = Environment(loader=FileSystemLoader("template"))
def main(): def main():
os.makedirs("site/en/", exist_ok=True) os.makedirs("site/en/", exist_ok=True)
for page in PAGES: for page in PAGES:
+1 -19
View File
@@ -362,24 +362,6 @@ datum, vreme, lokacija, tema, tip, link, temaEN
11-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Hardware hackathon,workshop,,Hardware hackathon 11-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Hardware hackathon,workshop,,Hardware hackathon
12-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,OpenSCAD,lecture,,OpenSCAD 12-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,OpenSCAD,lecture,,OpenSCAD
18-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,OverTheWire (Bandit),workshop,https://forum.dmz.rs/t/overthewire-bandit-1-14/1196,OverTheWire (Bandit) 18-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,OverTheWire (Bandit),workshop,https://forum.dmz.rs/t/overthewire-bandit-1-14/1196,OverTheWire (Bandit)
19-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,The Strange Loop videos,lecture,https://www.thestrangeloop.com/index.html,The Strange Loop videos 19-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Film: The Seventh Seal (1957),movie,,Movie: The Seventh Seal (1957)
25-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Reverse engineering,workshop,,Reverse engineering 25-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Reverse engineering,workshop,,Reverse engineering
26-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Film: TPB-AFK (2013),movie,,Movie: TPB-AFK (2013) 26-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Film: TPB-AFK (2013),movie,,Movie: TPB-AFK (2013)
31-05-2026, 17:00, Drustveni centar Loza - Ivankovačka 21 https://www.openstreetmap.org/node/4013343518,Uvod u informacionu bezbednost,lecture,,Introduction to information security
01-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Sysadmin radionica,workshop,,Sysadmin workshop
02-06-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Software hackathon,workshop,,Software hackathon
07-06-2026, 10:00, KC Magacin - Marka Kraljevica 4 https://www.openstreetmap.org/#map=18/44.813246/20.453640, Zig Day,workshop,https://zig.day/europe/belgrade/1/,Zig Day
08-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Decentrala offline forum,workshop,,Decentrala offline forum
15-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,OverTheWire - Bandit CTF,workshop,,OverTheWire - Bandit CTF
16-06-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606, OSM contributing,workshop,,OSM contributing
22-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,OverTheWire - Bandit CTF,workshop,,OverTheWire - Bandit CTF
29-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,LAN party,party,,LAN Party
06-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Linux ricing,lightning,,Linux ricing
13-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Hardware CTF/Logic analyzer,workshop,,Hardware CTF/Logic analyzer
20-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,T-shirt workshop,workshop,,T-shirt workshop
27-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Lightning talks,lightning,,Lightning talks
03-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Sysadmin radionica,workshop,,Sysadmin workshop
10-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,LAN party,party,,LAN Party
17-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Mail server - 1. deo,workshop,, Mail server - part 1
24-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Film: Primer (2004),movie,,Movie: Primer (2004)
31-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Lightning talks,lightning,,Lightning talks
1 datum vreme lokacija tema tip link temaEN
362 11-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Hardware hackathon workshop Hardware hackathon
363 12-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 OpenSCAD lecture OpenSCAD
364 18-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire (Bandit) workshop https://forum.dmz.rs/t/overthewire-bandit-1-14/1196 OverTheWire (Bandit)
365 19-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 The Strange Loop videos Film: The Seventh Seal (1957) lecture movie https://www.thestrangeloop.com/index.html The Strange Loop videos Movie: The Seventh Seal (1957)
366 25-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Reverse engineering workshop Reverse engineering
367 26-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 Film: TPB-AFK (2013) movie Movie: TPB-AFK (2013)
31-05-2026 17:00 Drustveni centar Loza - Ivankovačka 21 https://www.openstreetmap.org/node/4013343518 Uvod u informacionu bezbednost lecture Introduction to information security
01-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Sysadmin radionica workshop Sysadmin workshop
02-06-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 Software hackathon workshop Software hackathon
07-06-2026 10:00 KC Magacin - Marka Kraljevica 4 https://www.openstreetmap.org/#map=18/44.813246/20.453640 Zig Day workshop https://zig.day/europe/belgrade/1/ Zig Day
08-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Decentrala offline forum workshop Decentrala offline forum
15-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire - Bandit CTF workshop OverTheWire - Bandit CTF
16-06-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 OSM contributing workshop OSM contributing
22-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire - Bandit CTF workshop OverTheWire - Bandit CTF
29-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 LAN party party LAN Party
06-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Linux ricing lightning Linux ricing
13-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Hardware CTF/Logic analyzer workshop Hardware CTF/Logic analyzer
20-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 T-shirt workshop workshop T-shirt workshop
27-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Lightning talks lightning Lightning talks
03-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Sysadmin radionica workshop Sysadmin workshop
10-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 LAN party party LAN Party
17-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Mail server - 1. deo workshop Mail server - part 1
24-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Film: Primer (2004) movie Movie: Primer (2004)
31-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Lightning talks lightning Lightning talks
+1 -1
View File
@@ -11,7 +11,7 @@ from cairosvg import svg2png
CURRENT_TIME = dt.date.today() CURRENT_TIME = dt.date.today()
NEXT_MONTH = CURRENT_TIME + relativedelta.relativedelta(months=1, day=1) NEXT_MONTH = CURRENT_TIME + relativedelta.relativedelta(months=1, day=1)
DAYS_OF_WEEK_SR = ("PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED") DAYS_OF_WEEK_SR = ("PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED")
DAYS_OF_WEEK_EN = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN") DAYS_OF_WEEK_EN = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUn")
MONTHS_SR = ( MONTHS_SR = (
"Januar", "Januar",
-3
View File
@@ -1,12 +1,9 @@
# Start nginx in this directory with `nginx -p . -c nginx.conf` # Start nginx in this directory with `nginx -p . -c nginx.conf`
# Stop nginx with `nginx -p . -s stop` # Stop nginx with `nginx -p . -s stop`
pid nginx.pid;
events {} events {}
http { http {
# edit this for your system # edit this for your system
types_hash_max_size 2048;
types_hash_bucket_size 128; types_hash_bucket_size 128;
include /etc/nginx/mime.types; include /etc/nginx/mime.types;
-1
View File
@@ -1 +0,0 @@
172000
+2 -2
View File
@@ -66,14 +66,14 @@
<a href="https://github.com/searxng/searxg/">SearXNG</a> instance used for <a href="https://github.com/searxng/searxg/">SearXNG</a> instance used for
Web searching. Web searching.
</td> </td>
</tr> --> </tr>
<tr> <tr>
<td><a href="https://pastebin.dmz.rs/">Pastebin</a></td> <td><a href="https://pastebin.dmz.rs/">Pastebin</a></td>
<td> <td>
<a href="https://privatebin.info/">PrivateBin</a> instance we use for <a href="https://privatebin.info/">PrivateBin</a> instance we use for
sharing text files sharing text files
</td> </td>
</tr> </tr> -->
<tr> <tr>
<td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td> <td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td>
<td> <td>
+1 -3
View File
@@ -24,9 +24,7 @@
By simply using services we are hosting, conts as contributing, because in By simply using services we are hosting, conts as contributing, because in
that way you joining the decetralization. that way you joining the decetralization.
</p> </p>
<p> <p>Also, we accept donations in bitcoin to the following address:</p>
Also, we accept donations in bitcoin on the following address:
</p>
<ul> <ul>
<li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li> <li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li>
<!-- <li> <!-- <li>
+2 -2
View File
@@ -69,14 +69,14 @@
<a href="https://github.com/searxng/searxng/">SearXNG</a> instanca koju <a href="https://github.com/searxng/searxng/">SearXNG</a> instanca koju
koristimo za pretraživanje Interneta. Zamena za Google. koristimo za pretraživanje Interneta. Zamena za Google.
</td> </td>
</tr>--> </tr>
<tr> <tr>
<td><a href="https://pastebin.dmz.rs/">Pastebin</a></td> <td><a href="https://pastebin.dmz.rs/">Pastebin</a></td>
<td> <td>
<a href="https://privatebin.info/">PrivateBin</a> instanca koju koristimo <a href="https://privatebin.info/">PrivateBin</a> instanca koju koristimo
za brzo deljenje tekstualnih fajlova za brzo deljenje tekstualnih fajlova
</td> </td>
</tr> </tr>-->
<tr> <tr>
<td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td> <td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td>
<td> <td>
-7
View File
@@ -5,13 +5,6 @@ import os
DAYS_SR = ["PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED"] DAYS_SR = ["PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED"]
DAYS_EN = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"] DAYS_EN = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
ICAL_LOCATION_ADDRESSES = {
"Xecut": "XECUT\\, Jovana Ćirilova 15\\, Local 3\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica JAG2)": "Matematički fakultet (JAG2)\\, Vatroslava Jagića 5\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica JAG3)": "Matematički fakultet (JAG3)\\, Vatroslava Jagića 5\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica 153)": "Matematički fakultet\\, Svetog Nikole 39\\, Beograd\\, Serbia",
}
TYPES_DICT = { TYPES_DICT = {
"hack": ("hakaton", "hackathon"), "hack": ("hakaton", "hackathon"),
"lecture": ("predavanje", "lecture"), "lecture": ("predavanje", "lecture"),
-23
View File
@@ -15,7 +15,6 @@ window.addEventListener("DOMContentLoaded", () => {
/* Functions */ /* Functions */
const changeToDarkTheme = () => { const changeToDarkTheme = () => {
window.localStorage.setItem("theme", "dark");
document.documentElement.classList.add("dark"); document.documentElement.classList.add("dark");
themeBtn?.setAttribute("title", "turn the light on"); themeBtn?.setAttribute("title", "turn the light on");
Array.from(imgs).forEach((img) => { Array.from(imgs).forEach((img) => {
@@ -24,7 +23,6 @@ window.addEventListener("DOMContentLoaded", () => {
} }
const changeToLightTheme = () => { const changeToLightTheme = () => {
window.localStorage.setItem("theme", "light");
document.documentElement.classList.remove("dark"); document.documentElement.classList.remove("dark");
themeBtn?.setAttribute("title", "turn the light off"); themeBtn?.setAttribute("title", "turn the light off");
Array.from(imgs).forEach((img) => { Array.from(imgs).forEach((img) => {
@@ -48,27 +46,6 @@ window.addEventListener("DOMContentLoaded", () => {
window.addEventListener("resize", () => isMenuOpen() && closeMenu()); window.addEventListener("resize", () => isMenuOpen() && closeMenu());
main.addEventListener("click", () => isMenuOpen() && closeMenu()); main.addEventListener("click", () => isMenuOpen() && closeMenu());
/* Language persistence */
const currentLang = document.documentElement.lang || "sr";
const anchors = document.getElementsByTagName("a");
Array.from(anchors).forEach((a) => {
// Skip language switcher links
if (a.classList.contains("lang")) return;
const href = a.getAttribute("href");
if (!href) return;
if (href.startsWith("/")) {
// Replace existing language prefix or add one
if (href.startsWith("/sr") || href.startsWith("/en")) {
if (!href.startsWith(`/${currentLang}`)) {
a.setAttribute("href", `/${currentLang}${href.slice(3)}`);
}
} else {
// No language prefix, prepend currentLang
a.setAttribute("href", `/${currentLang}${href}`);
}
}
});
hamburger?.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu()); hamburger?.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu());
themeBtn.addEventListener("click", () => { themeBtn.addEventListener("click", () => {