Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
7106b25
feat(client): add a very basic WIP client
csboo Dec 2, 2025
4e816eb
fix(client): admin doesnt need to join
csboo Dec 2, 2025
a7b7fc9
feat(client): refactor main.css, add colorscheme in tailwind.css
csboo Dec 3, 2025
454c8d5
feat(client): styles for buttons and inputs
csboo Dec 3, 2025
6703b74
feat(client): styles for the table
csboo Dec 3, 2025
16d9fdc
fix(client): adjust for updated backend
csboo Dec 3, 2025
2baf2da
chores(client): better variable naming scheme
csboo Dec 3, 2025
927aaf6
fix(client): support setting the puzzle value
csboo Dec 3, 2025
ee97344
feat(client): see puzzle value by table header hover
csboo Dec 3, 2025
1b6e47e
misc(client): mock data for backend
csboo Dec 5, 2025
596d7ab
chores(client): code cleanup + add missing import in main
csboo Dec 5, 2025
978c25d
misc(client): some logs
csboo Dec 5, 2025
a50612d
feat(client): server message as popup
csboo Dec 5, 2025
a4d4799
fix(client): fixed wrong patch file
csboo Dec 5, 2025
a5f0f44
fix(client): support new api endpoints
csboo Dec 5, 2025
f13ad11
fix(client): support latest api models
csboo Dec 5, 2025
d26a9eb
feat(client): click to fullscreen table
csboo Dec 6, 2025
c861025
feat(client): (probably) all messages and placeholders in hungarian
csboo Dec 6, 2025
2dba63d
misc(client): move and rescale popup message
csboo Dec 6, 2025
13f1329
feat(client): set puzzles from csv
csboo Dec 8, 2025
b1a5b25
refactor(client): separate into crates, cleaner code
csboo Dec 8, 2025
6b33f94
fix(client): dont cut hover popup on fullscreen
csboo Dec 8, 2025
d7cb59b
fix(client): fix csv parser
csboo Dec 8, 2025
23f17a3
refactor(client): move ScoreTabel to component, code cleanup
csboo Dec 8, 2025
9440e72
merge(client): backend latest
csboo Dec 8, 2025
cb7d5b3
feat(client): popup red on error, blue on normal
csboo Dec 9, 2025
4b9e314
fix(client): event title actually optional
csboo Dec 9, 2025
e63870d
fix(client): sort the table so it doesnt jump around
csboo Dec 9, 2025
a6c9001
misc(client): minor qol tweaks
csboo Dec 9, 2025
4cadc80
feat(client): big loading screen
csboo Dec 9, 2025
7f71764
misc(client): better code for message handling
csboo Dec 9, 2025
911b97f
fix(client): no unwrap, no unsafe, satisfy clippy
csboo Dec 9, 2025
1bb42b0
misc(client): refactor score_table ui a bit
csboo Dec 9, 2025
7f012c2
feat(client): WIP select PuzzleId from dropdown
csboo Dec 9, 2025
6458e0b
merge!(client): backend latest
csboo Dec 9, 2025
8056a16
feat(client): support latest api, auth state cookie, logs
csboo Dec 10, 2025
e79c87f
fix(client): score_table De Morgan ;D
csboo Dec 10, 2025
c53c819
feat(client): team status indicator, dynamic dropdown
csboo Dec 10, 2025
d89b6ae
feat(client): ui update, better code
csboo Dec 11, 2025
bad0ab4
refactor(client): sparate everything into crates at last
csboo Dec 12, 2025
52a7432
misc(makefile): quote help
jarjk Dec 12, 2025
ae0a12e
Merge branch 'backend' into client
csboo Dec 12, 2025
2695f7b
feat(client): support logout logic
csboo Dec 12, 2025
d7ad2ab
misc(client): use native html select instead of dioxus'
csboo Dec 12, 2025
a436f21
misc(client): wait for server to set the state (revert)
csboo Dec 12, 2025
9ca3e8d
fix(client): dont allow empty names + small code improvments
csboo Dec 12, 2025
f1d7c5e
Merge branch 'backend' into client
csboo Dec 12, 2025
f09d982
misc(client): proper handler + stlye for logout button
csboo Dec 13, 2025
ca7ef44
fix(client): use proper cursors
csboo Dec 13, 2025
7c4c2a2
fix(client): simpler admincheck, dropdown initial data
csboo Dec 13, 2025
c9f476e
fix(client): enable desktop build
jarjk Dec 13, 2025
252f945
chore(client): remove 14 unneded clones
csboo Dec 13, 2025
dfa8b75
fix(client): ui improvments, flex, scrolltable
csboo Dec 13, 2025
77e0921
chore(make): don't include unnecessary web feature for server
jarjk Dec 14, 2025
f09e6eb
fix(client): fix dropdown value selection (proper default value)
csboo Dec 14, 2025
404d547
Merge branch 'backend' into client
jarjk Dec 14, 2025
a805490
chore(make): make bundling easier
jarjk Dec 14, 2025
561db22
misc(backend): tiny communication improvements
jarjk Dec 14, 2025
d3a60ea
misc(backend): tiny communication improvements
jarjk Dec 14, 2025
e11d459
chore(client): fn to sum team's points + use in table order
csboo Dec 15, 2025
f6116b0
feat(client): support wipe logout + alert popups + sparate TeamSection
csboo Dec 15, 2025
764d44d
chore(client): code optimization + separate tailwind consts
csboo Dec 15, 2025
b86dbeb
chore(assets): add proper favicon, thanks to @xoudoesthings, delete d…
jarjk Dec 15, 2025
b9222a1
misc(client): totally unneeded css flash on buttons
csboo Dec 15, 2025
ef34c70
Merge branch 'backend' into client
jarjk Dec 16, 2025
8c4cece
fix(client): validate values before sending
csboo Dec 16, 2025
1af562a
feat(client): set admin password when admin join
csboo Dec 16, 2025
b5388ce
misc(client): ui improvment
csboo Dec 16, 2025
8b719c5
Merge branch 'backend' into client (password has to match previous one)
jarjk Dec 16, 2025
b3b2f1c
misc(client): small ui changes
csboo Dec 16, 2025
622614f
fix(client): respect server admin password errors
csboo Dec 16, 2025
bd2f630
chore(make): delete cache, don't bloat, ulimit won't work inside the …
jarjk Dec 16, 2025
5e7993e
chore: add build script and so banner
jarjk Dec 17, 2025
69014e6
chore: cargo features fix
jarjk Dec 19, 2025
7c29c6f
refactor(client): custom toast -> dioxus_primitives::Toast
csboo Dec 20, 2025
d9b33c0
misc(client): css adjustments
csboo Dec 20, 2025
4d953c1
Merge branch 'main' into client
jarjk Jan 20, 2026
c431794
chore: add .env.example and requests.fish
jarjk Mar 3, 2026
963bc65
chore: maybe ci tip-release fix
csboo Mar 3, 2026
ce23b48
misc: fix request fish mocker
jarjk Mar 13, 2026
7777774
refactor(client): separate app into home and admin, use dioxus_router…
csboo Mar 4, 2026
1e2f430
refactor: many abstractions, better component structure and /componen…
csboo Mar 23, 2026
8ce93fa
refactor: proc-macro gen toast fn-s
jarjk Apr 20, 2026
feb0a8e
refactor: make use of upstream dx cookie-fix
jarjk Apr 20, 2026
d54ad2a
Merge branch 'main' into mvp-client
jarjk Apr 20, 2026
2611b1e
fix(client/admin): implement new initial admin-password
jarjk Apr 20, 2026
6704109
chore: delete old files
jarjk Apr 20, 2026
365d33f
refactor: whole UI upgrade/rework + extras
csboo Apr 22, 2026
d0ef78a
fix: no `is_admin`, no admin name, titled popups
csboo Apr 22, 2026
813438d
fix: no popup hover effect when only 1 active
csboo Apr 22, 2026
9a8e9c9
misc: remove/comment unused/deprecated things (silence warnings)
csboo Apr 22, 2026
7d25993
Merge branch 'mvp-client' into client
csboo Apr 22, 2026
8d44b1d
Merge branch 'main' into client
csboo Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ edition = "2024"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
csv = "1.4.0"
dioxus-primitives = { git = "https://github.com/DioxusLabs/components", version = "0.0.1", default-features = false }
gloo-timers = { version = "0.4.0", features = ["futures"], optional = true }
chacha20poly1305 = { version = "0.10.1", optional = true }
ciborium = { version = "0.2.2", optional = true }
dioxus = { version = "0.7.6", features = ["fullstack"] }
Expand All @@ -22,10 +25,12 @@ rust-argon2 = { version = "3.0.0", optional = true }
tokio = { version = "1.52.1", optional = true }
uuid = { version = "1.23.1", features = ["v4", "serde"], optional = true }
zeroize = { version = "1.8.2", optional = true }
dioxus-router = "0.7.4"

[features]
default = []
web = ["dioxus/web"]
default = ["web"]
web = ["dioxus/web", "dep:gloo-timers"]
desktop = ["dioxus/desktop", "dep:tokio"]
# desktop = ["dioxus/desktop"]
# mobile = ["dioxus/mobile"]
server = [
Expand Down
99 changes: 99 additions & 0 deletions assets/dx-components-theme.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/* ============================================
APOLLO - DIOXUS COMPONENTS THEME
Global styles for styled Dioxus components
============================================ */

@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");

body {
padding: 0;
margin: var(--space-6);
background-color: var(--bg);
color: var(--text-primary);
font-family: Inter, system-ui, -apple-system, sans-serif;
font-optical-sizing: auto;
font-style: normal;
font-weight: 400;
line-height: 1.6;
}

:root {
/* Primary colors */
--primary-color: var(--bg);
--primary-color-1: var(--bg);
--primary-color-2: var(--bg);
--primary-color-3: var(--bg-elevated);
--primary-color-4: var(--bg-surface);
--primary-color-5: var(--bg-hover);
--primary-color-6: var(--border-default);
--primary-color-7: var(--border-strong);

/* Secondary colors */
--secondary-color: var(--text-primary);
--secondary-color-1: var(--text-primary);
--secondary-color-2: var(--text-primary);
--secondary-color-3: var(--text-secondary);
--secondary-color-4: var(--text-primary);
--secondary-color-5: var(--text-muted);
--secondary-color-6: var(--text-muted);

/* Highlight colors */
--focused-border-color: var(--accent-primary);
--primary-success-color: var(--accent-success-subtle);
--secondary-success-color: var(--accent-success);
--primary-warning-color: var(--accent-warning-subtle);
--secondary-warning-color: var(--accent-warning);
--primary-error-color: var(--accent-danger-subtle);
--secondary-error-color: var(--accent-danger);
--contrast-error-color: var(--text-primary);
--primary-info-color: var(--bg-hover);
--secondary-info-color: var(--text-secondary);
}

/* Scrollbar styling */
@supports (scrollbar-width: auto) {
* {
scrollbar-width: thin;
scrollbar-color: var(--border-strong) transparent;
}

*:not(:hover) {
scrollbar-color: transparent transparent;
}

*:hover {
scrollbar-color: var(--border-strong) transparent;
}
}

@supports selector(::-webkit-scrollbar) {
::-webkit-scrollbar {
width: 8px;
height: 8px;
}

::-webkit-scrollbar-track {
background: transparent;
}

::-webkit-scrollbar-thumb {
background: var(--border-strong);
border-radius: var(--radius-full);
}

::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
}

/* Focus styles */
:focus-visible {
outline: 2px solid var(--accent-primary);
outline-offset: 2px;
}

/* Selection styling */
::selection {
background: var(--accent-primary-subtle);
color: var(--text-primary);
}
244 changes: 244 additions & 0 deletions assets/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
/* Layout modes */
.normal .others-container {
display: block;
}

.table-only .others-container {
display: none !important;
}

/* Fullscreen table overlay */
.table-overlay {
position: fixed;
inset: 0;
z-index: 1000;
display: grid;
place-items: center;
padding: var(--space-6);
background: rgba(9, 9, 11, 0.95);
backdrop-filter: blur(12px);
overscroll-behavior: none;
animation: fadeIn 0.2s ease-out;
}

@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}

.table-window {
width: min(95vw, 1400px);
height: min(90vh, 900px);
overflow: hidden;
border: 1px solid var(--border-default);
border-radius: var(--radius-xl);
background: var(--bg-elevated);
box-shadow: var(--shadow-xl);
animation: scaleIn 0.25s ease-out;
}

@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.96);
}
to {
opacity: 1;
transform: scale(1);
}
}

.table-viewport {
width: 100%;
height: 100%;
overflow: auto;
overscroll-behavior: none;
}

.table-only .score-table {
min-width: 100%;
width: max-content;
margin: 0;
}

/* Score table shell */
.score-table-shell {
position: relative;
width: fit-content;
}

.score-table-shell-preview {
display: inline-block;
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--border-default);
background: var(--bg-elevated);
transition: all 0.2s ease;
}

.score-table-shell-preview:hover {
border-color: var(--border-strong);
box-shadow: var(--shadow-md);
}

.score-table-preview-overlay {
position: absolute;
inset: 0;
z-index: 4;
display: grid;
place-items: center;
pointer-events: none;
background: linear-gradient(
to bottom,
transparent 40%,
rgba(9, 9, 11, 0.8) 100%
);
border-radius: var(--radius-lg);
}

.score-table-preview-overlay-text {
padding: var(--space-2) var(--space-4);
border-radius: var(--radius-full);
background: var(--bg-surface);
color: var(--text-secondary);
font-size: var(--text-sm);
font-weight: 500;
border: 1px solid var(--border-default);
box-shadow: var(--shadow-md);
}

/* Score table sticky headers */
.score-table {
border-collapse: separate;
border-spacing: 0;
}

.score-table thead th {
position: sticky;
top: 0;
z-index: 5;
background: var(--bg-elevated);
}

.score-table thead th:first-child {
left: 0;
z-index: 6;
min-width: 10rem;
}

.score-table tbody td:first-child {
position: sticky;
left: 0;
z-index: 4;
background: var(--bg-elevated);
}

/* Loading state */
.loading {
position: fixed;
inset: 0;
display: grid;
place-items: center;
width: 100vw;
height: 100vh;
background: var(--bg);
}

/* Toast/popup legacy styles */
.popup {
width: auto;
height: auto;
position: fixed;
top: var(--space-6);
right: var(--space-6);
background: var(--bg-elevated);
color: var(--text-primary);
padding: var(--space-4) var(--space-5);
font-size: var(--text-sm);
border-radius: var(--radius-lg);
border: 1px solid var(--border-default);
box-shadow: var(--shadow-lg);
animation:
slideIn 0.2s ease-out,
fadeout 0.2s ease-in 2.8s forwards;
}

@keyframes slideIn {
from {
opacity: 0;
transform: translateY(-8px) translateX(8px);
}
to {
opacity: 1;
transform: translateY(0) translateX(0);
}
}

@keyframes fadeout {
to {
opacity: 0;
transform: translateY(-8px);
}
}

#msgerr.popup {
border-color: var(--accent-danger);
}

#msgnorm.popup {
border-color: var(--accent-primary);
}

/* Base body styles */
body {
background-color: var(--bg);
color: var(--text-primary);
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
margin: 0;
padding: var(--space-6);
min-height: 100vh;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

/* Table styling */
table {
border-collapse: separate;
border-spacing: 0;
}

th, td {
border: 1px solid var(--border-default);
color: var(--text-primary);
}

td {
min-width: 7rem;
height: 3rem;
}

/* Form container */
.input-flexy-boxy {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
align-items: flex-end;
}

/* Smooth scrolling */
html {
scroll-behavior: smooth;
}

/* Better focus visibility */
:focus-visible {
outline: 2px solid var(--accent-primary);
outline-offset: 2px;
}

/* Selection */
::selection {
background: var(--accent-primary-subtle);
color: var(--text-primary);
}
4 changes: 2 additions & 2 deletions assets/translations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ terms:
# prepare-startup
env-var-not-set:
en: env var "{$key}" not set, can't proceed
hu: nincs beállítva a "{$key}" környezeti változó, feladjuk
hu: nincs beállítva a(z) "{$key}" környezeti változó, feladjuk
empty-env-var:
en: env var "{$key}" empty, can't proceed
hu: a "{$key}" környezeti változó üres, feladjuk
hu: a(z) "{$key}" környezeti változó üres, feladjuk
state-load-err:
en: "couldn't load saved state due tue: {$error}, exiting..."
hu: "nem sikerült betölteni az elmentett állapotot: {$error}, feladjuk"
Expand Down
Loading
Loading