From 91bbf4b3ba6f4db7753d4b3c93961dc04cc8d6b7 Mon Sep 17 00:00:00 2001 From: thomas Date: Fri, 20 Feb 2026 19:43:19 +0100 Subject: [PATCH] Refactor: Series A clean structure --- .gitignore | 13 ++ LICENSE | 17 +- README.md | 1 - branding/TuxiNet_Branding_Guide.md | 33 ++++ branding/TuxiNet_Roadmap.png | Bin 0 -> 28195 bytes business/Business_Model.md | 36 ++++ business/PITCH.md | 34 ++++ business/TuxiNet_Enterprise_Roadmap.md | 28 +++ business/TuxiNet_Risk_Analysis.md | 23 +++ business/TuxiNet_Valuation_Estimate.md | 25 +++ business/V1_0_PLANNING.md | 50 ++++++ docs/CHANGELOG.md | 35 ++++ docs/GDPR_Data_Compliance.md | 37 ++++ docs/RELEASE_STRUCTURE.md | 20 +++ docs/ROADMAP.md | 145 +++++++++++++++ docs/SECURITY.md | 43 +++++ docs/funktioner.md | 170 ++++++++++++++++++ docs/manual.md | 77 ++++++++ finance/TuxiNet_3Year_Financial_Model.xlsx | Bin 0 -> 7285 bytes finance/TuxiNet_Financial_Projection.xlsx | Bin 0 -> 5331 bytes finance/TuxiNet_TAM_SAM_SOM.xlsx | Bin 0 -> 6568 bytes pitch/TuxiNet_Investor_Pitch_Deck.pptx | Bin 0 -> 28267 bytes pitch/TuxiNet_Pitch_Deck_v2.pptx | Bin 0 -> 32603 bytes pitch/TuxiNet_Sponsor_Pitch_Deck.pptx | Bin 0 -> 28266 bytes releases/GIT_RELEASE_v0.6.0.md | 46 +++++ releases/RELEASE_NOTES_v0.6.0.md | 47 +++++ .../TuxiNet_Terminal_Branded_Whitepaper.pdf | 80 +++++++++ releases/TuxiNet_Terminal_Event_Agreement.pdf | 74 ++++++++ .../TuxiNet_Terminal_Whitepaper_v0.6.0.pdf | 99 ++++++++++ src/assets/.gitkeep | 0 src/backup/.gitkeep | 0 src/database/.gitkeep | 0 src/lanpos/.gitkeep | 0 src/scripts/.gitkeep | 0 wiki/INDEX.md | 14 ++ wiki/WIKI_Backup.md | 13 ++ wiki/WIKI_Event_Deployment.md | 26 +++ wiki/WIKI_Fejlsoegning.md | 20 +++ wiki/WIKI_Frontpage_Styled.md | 34 ++++ wiki/WIKI_Hardware_Arkitektur.md | 28 +++ wiki/WIKI_Home.md | 21 +++ wiki/WIKI_Installation.md | 24 +++ wiki/WIKI_KlubKort.md | 22 +++ wiki/WIKI_PrintAgent.md | 14 ++ wiki/WIKI_SUADMIN.md | 14 ++ wiki/WIKI_Service_Manual.md | 24 +++ wiki/WIKI_Statistikpanel.md | 14 ++ 47 files changed, 1384 insertions(+), 17 deletions(-) create mode 100644 .gitignore create mode 100644 branding/TuxiNet_Branding_Guide.md create mode 100644 branding/TuxiNet_Roadmap.png create mode 100644 business/Business_Model.md create mode 100644 business/PITCH.md create mode 100644 business/TuxiNet_Enterprise_Roadmap.md create mode 100644 business/TuxiNet_Risk_Analysis.md create mode 100644 business/TuxiNet_Valuation_Estimate.md create mode 100644 business/V1_0_PLANNING.md create mode 100644 docs/CHANGELOG.md create mode 100644 docs/GDPR_Data_Compliance.md create mode 100644 docs/RELEASE_STRUCTURE.md create mode 100644 docs/ROADMAP.md create mode 100644 docs/SECURITY.md create mode 100644 docs/funktioner.md create mode 100644 docs/manual.md create mode 100644 finance/TuxiNet_3Year_Financial_Model.xlsx create mode 100644 finance/TuxiNet_Financial_Projection.xlsx create mode 100644 finance/TuxiNet_TAM_SAM_SOM.xlsx create mode 100644 pitch/TuxiNet_Investor_Pitch_Deck.pptx create mode 100644 pitch/TuxiNet_Pitch_Deck_v2.pptx create mode 100644 pitch/TuxiNet_Sponsor_Pitch_Deck.pptx create mode 100644 releases/GIT_RELEASE_v0.6.0.md create mode 100644 releases/RELEASE_NOTES_v0.6.0.md create mode 100644 releases/TuxiNet_Terminal_Branded_Whitepaper.pdf create mode 100644 releases/TuxiNet_Terminal_Event_Agreement.pdf create mode 100644 releases/TuxiNet_Terminal_Whitepaper_v0.6.0.pdf create mode 100644 src/assets/.gitkeep create mode 100644 src/backup/.gitkeep create mode 100644 src/database/.gitkeep create mode 100644 src/lanpos/.gitkeep create mode 100644 src/scripts/.gitkeep create mode 100644 wiki/INDEX.md create mode 100644 wiki/WIKI_Backup.md create mode 100644 wiki/WIKI_Event_Deployment.md create mode 100644 wiki/WIKI_Fejlsoegning.md create mode 100644 wiki/WIKI_Frontpage_Styled.md create mode 100644 wiki/WIKI_Hardware_Arkitektur.md create mode 100644 wiki/WIKI_Home.md create mode 100644 wiki/WIKI_Installation.md create mode 100644 wiki/WIKI_KlubKort.md create mode 100644 wiki/WIKI_PrintAgent.md create mode 100644 wiki/WIKI_SUADMIN.md create mode 100644 wiki/WIKI_Service_Manual.md create mode 100644 wiki/WIKI_Statistikpanel.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fa31e1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# OS +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ + +# Logs +*.log + +# Build/exports +*.zip diff --git a/LICENSE b/LICENSE index e7170d1..6675ebf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,18 +1,3 @@ MIT License -Copyright (c) 2026 thomas - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. +Copyright (c) TuxiNet diff --git a/README.md b/README.md index dc86a78..a76913b 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,6 @@ betegnes Beta da følgende endnu ikke er implementeret: - Lagerstyring ------------------------------------------------------------------------ -![Roadmap](TuxiNet_Roadmap.png) ## License diff --git a/branding/TuxiNet_Branding_Guide.md b/branding/TuxiNet_Branding_Guide.md new file mode 100644 index 0000000..82ed526 --- /dev/null +++ b/branding/TuxiNet_Branding_Guide.md @@ -0,0 +1,33 @@ +# TuxiNet Terminal -- Branding Guide + +Version: v0.6.0 Beta\ +Date: 2026-02-20 + +## Brand Identity + +- **Keywords:** Reliable, Event-grade, Offline-first, Control +- **Tone:** Professional, technical, calm, confident + +## Color Palette (Suggested) + +- Primary: #0F172A (Deep Blue) +- Accent: #00FFFF (Neon Cyan) +- Secondary: #94A3B8 (Soft Grey) +- Highlight: #FF2E88 (Event Pink) + +## Typography (Suggested) + +- Headings: Bold sans-serif +- Body: Clean modern sans-serif + +## Messaging Rules + +- Emphasize offline reliability and stability +- Highlight modular architecture (Print Agent, Backup, SUADMIN) +- Avoid overstating "real-time" where sync is hourly + +## Logo Usage + +- Keep clear space around logo +- Do not stretch +- Prefer dark backgrounds for neon accents diff --git a/branding/TuxiNet_Roadmap.png b/branding/TuxiNet_Roadmap.png new file mode 100644 index 0000000000000000000000000000000000000000..5738a888ad1d3cdc15e7a300adf1dcfd84ee4a38 GIT binary patch literal 28195 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 Z^cS&aBj-Qiz&6R^h07Pjez9@ye*iFMM6Un< literal 0 HcmV?d00001 diff --git a/business/Business_Model.md b/business/Business_Model.md new file mode 100644 index 0000000..adefa8a --- /dev/null +++ b/business/Business_Model.md @@ -0,0 +1,36 @@ +# Business Model -- TuxiNet Terminal + +Version: v0.6.0 Beta\ +Date: 2026-02-20 + +## Primary Revenue Options + +1. **Event Rental** + - Fixed fee per event (incl. hardware + setup) + - Optional on-site support add-on +2. **Subscription** + - Monthly fee (updates + support) + - Optional modules as tiers (Stats, KlubKort, Enterprise) +3. **Licensing** + - Per-terminal licensing + - Annual maintenance and support contract + +## Target Segments + +- LAN organizers +- Schools / youth events +- Associations and clubs +- Pop-up sales / small venues + +## Value Proposition + +- Works offline (reliable revenue capture) +- Touch-first UX (fast checkout) +- KlubKort RFID payment (reduced cash handling) +- Proven at events (operational readiness) + +## Upsell & Expansion + +- Enterprise multi-terminal sync +- Inventory management module +- Central admin + monitoring diff --git a/business/PITCH.md b/business/PITCH.md new file mode 100644 index 0000000..0b2cd35 --- /dev/null +++ b/business/PITCH.md @@ -0,0 +1,34 @@ +# TuxiNet Terminal + +## Event-Ready POS Platform + +TuxiNet Terminal is a purpose-built Point Of Sale system designed for +events, LAN parties and association-based environments. + +------------------------------------------------------------------------ + +## Why Choose TuxiNet Terminal? + +- Works fully offline +- Fast touch-based interface +- RFID payment support (KlubKort) +- Reliable receipt printing +- Automatic hourly backups +- Web-based revenue overview + +------------------------------------------------------------------------ + +## Ideal For + +- LAN events +- Schools +- Clubs & associations +- Pop-up sales environments + +------------------------------------------------------------------------ + +## Status + +Currently running as v0.6.0 Beta and actively used at events. + +For inquiries: TuxiNet.dk diff --git a/business/TuxiNet_Enterprise_Roadmap.md b/business/TuxiNet_Enterprise_Roadmap.md new file mode 100644 index 0000000..93e2be9 --- /dev/null +++ b/business/TuxiNet_Enterprise_Roadmap.md @@ -0,0 +1,28 @@ +# TuxiNet Terminal -- Enterprise Edition Roadmap + +Date: 2026-02-20 + +## Phase 1 -- v1.0 Foundation + +- Real-time dashboard +- Inventory management +- Multi-terminal synchronization +- Enhanced reporting and exports + +## Phase 2 -- Enterprise Infrastructure + +- Central administration server +- Role-based access control (RBAC) +- API integration layer +- Health checks + monitoring + +## Phase 3 -- Hybrid / Optional Cloud + +- Optional cloud analytics +- Remote monitoring +- Automated update pipeline + +## Long-term Vision + +Enterprise Edition supports large multi-day events with synchronized +terminals and centralized control. diff --git a/business/TuxiNet_Risk_Analysis.md b/business/TuxiNet_Risk_Analysis.md new file mode 100644 index 0000000..a823091 --- /dev/null +++ b/business/TuxiNet_Risk_Analysis.md @@ -0,0 +1,23 @@ +# Risk Analysis & Mitigation Plan + +Date: 2026-02-20 + +## Technical Risks + +- Hardware failure → Mitigation: Redundant equipment +- Data corruption → Mitigation: Hourly backups + +## Market Risks + +- Low adoption → Mitigation: Focused niche strategy +- Competition → Mitigation: Offline differentiation + +## Financial Risks + +- Cash flow constraints → Mitigation: Event rental model +- Scaling costs → Mitigation: Phased enterprise rollout + +## Operational Risks + +- Event downtime → Mitigation: Pre-event checklist +- Human error → Mitigation: Simplified touch UI diff --git a/business/TuxiNet_Valuation_Estimate.md b/business/TuxiNet_Valuation_Estimate.md new file mode 100644 index 0000000..390db8a --- /dev/null +++ b/business/TuxiNet_Valuation_Estimate.md @@ -0,0 +1,25 @@ +# Valuation Estimate -- TuxiNet Terminal + +Date: 2026-02-20 + +## Methodology + +Early-stage SaaS/Event-Tech valuation based on: + +- Revenue multiple (3x--6x projected annual revenue) +- Risk-adjusted startup multiplier +- Market opportunity + +## Example Scenario + +Projected Year 3 Revenue: 2,000,000 DKK\ +Conservative Multiple: 3x\ +Estimated Valuation: 6,000,000 DKK + +Aggressive Multiple: 6x\ +Estimated Valuation: 12,000,000 DKK + +## Notes + +Valuation depends heavily on: - Traction - Growth rate - Market +expansion - Strategic partnerships diff --git a/business/V1_0_PLANNING.md b/business/V1_0_PLANNING.md new file mode 100644 index 0000000..9e05b96 --- /dev/null +++ b/business/V1_0_PLANNING.md @@ -0,0 +1,50 @@ +# TuxiNet Terminal -- v1.0 Planning Document + +Date: 2026-02-20 + +## Objective + +Transition from Beta (v0.6.0 Beta) to stable v1.0 production release. + +------------------------------------------------------------------------ + +## Required Features for v1.0 + +- Real-time statistics dashboard +- Multi-terminal synchronization +- Inventory management +- Enhanced reporting system +- Improved UI consistency +- Central administration support + +------------------------------------------------------------------------ + +## Architecture Improvements + +- Event-based sync engine +- Structured API layer +- Modular inventory service + +------------------------------------------------------------------------ + +## Stability Goals + +- Stress-tested under high load +- Improved logging granularity +- Automated health checks + +------------------------------------------------------------------------ + +## Release Criteria + +- All core modules stable +- Backup verified +- Print agent validated +- Event deployment checklist completed + +------------------------------------------------------------------------ + +## Target Status + +TuxiNet Terminal v1.0 will represent a fully production-certified event +POS platform with enterprise-grade stability. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 0000000..640021f --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +## v0.6.0 Beta + +- Webbaseret statistikpanel +- UI forbedringer +- Stabilisering +- Forbedret betalingsflow + +## v0.5.x + +- SUADMIN driftspanel +- Backup automation +- Transaktionsvisning + +## v0.4.x + +- KlubKort (RFID betalingskort) + +## v0.3.x + +- Startup script +- Print agent separation + +## v0.2.x + +- ESC/POS integration + +## v0.1.x + +- Basal salgsfunktion + +## v0.0.1 + +- Proof of concept diff --git a/docs/GDPR_Data_Compliance.md b/docs/GDPR_Data_Compliance.md new file mode 100644 index 0000000..6d32186 --- /dev/null +++ b/docs/GDPR_Data_Compliance.md @@ -0,0 +1,37 @@ +# GDPR & Data Compliance + +Version: v0.6.0 Beta\ +Date: 2026-02-20 + +## Data Types (Typical) + +- Transaction data (items, totals, payment method) +- KlubKort account identifiers (card/searchkey) and balance +- Operational logs (system / print agent) + +## Processing Purpose + +- Completing sales and producing receipts +- Maintaining customer account balance (KlubKort) +- Basic operational auditing and troubleshooting + +## Storage & Retention + +- Primary storage is local on the terminal +- Hourly backups are created for recovery and reporting +- Retention should be defined per event (recommended: minimum needed + for accounting + troubleshooting) + +## Security Controls + +- Offline-first design (no public POS exposure required) +- Restricted access to SUADMIN and system accounts +- Physical access control to the terminal is required +- Secure tunnel recommended for backup transfer + +## Recommendations for Operators + +- Restrict access to the terminal and admin panels +- Keep Windows user accounts protected +- Verify backups before/after events +- Document retention period and deletion procedure diff --git a/docs/RELEASE_STRUCTURE.md b/docs/RELEASE_STRUCTURE.md new file mode 100644 index 0000000..00857cf --- /dev/null +++ b/docs/RELEASE_STRUCTURE.md @@ -0,0 +1,20 @@ +# Release Package Structure + +Version: v0.6.0 Beta + +------------------------------------------------------------------------ + +## Recommended ZIP Layout + +/TuxiNet-Terminal/ │ ├── lanpos/ ├── scripts/ ├── assets/ ├── database/ +├── backup/ ├── README.md ├── ROADMAP.md ├── CHANGELOG.md ├── +SECURITY.md ├── RELEASE_NOTES_v0.6.0.md └── Wiki/ + +------------------------------------------------------------------------ + +## Deployment Notes + +- Extract to target machine +- Verify XAMPP installation +- Confirm printer driver installed +- Run startup script diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md new file mode 100644 index 0000000..02de67b --- /dev/null +++ b/docs/ROADMAP.md @@ -0,0 +1,145 @@ +# TuxiNet Terminal + +## Udviklingsroadmap & Versionshistorik + +Dato: 2026-02-20\ +Aktuel version: v0.6.0 Beta + +------------------------------------------------------------------------ + +# Introduktion + +Dette dokument beskriver udviklingen af TuxiNet Terminal fra første +prototype (v0.0.1) til nuværende beta-version (v0.6.0 Beta). + +Systemet er udviklet med fokus på stabil offline-drift, touch-optimering +og event-baseret brug. + +------------------------------------------------------------------------ + +# v0.0.1 -- Proof of Concept + +- Simpelt salgsinterface +- Grundlæggende produktvalg +- Lokal database +- Manuel betaling uden print + +Formål: Bevise at systemet kunne fungere offline. + +------------------------------------------------------------------------ + +# v0.1.x -- Basis Salgssystem + +- Kurv-funktion +- Totalberegning +- Simpel betalingsregistrering +- Første print-integration + +Stabil salgsflow etableret. + +------------------------------------------------------------------------ + +# v0.2.x -- Print & Hardware Integration + +- ESC/POS printerstyring +- Automatisk åbning af pengeskuffe +- Stabil USB-håndtering +- Fejllogning + +Hardware blev fuldt integreret. + +------------------------------------------------------------------------ + +# v0.3.x -- Drift & Autostart + +- Startup PowerShell script +- Automatisk opstart af XAMPP +- Kiosk-mode i Chromium +- Print-agent som separat proces +- Log-system + +Systemet blev selvkørende ved boot. + +------------------------------------------------------------------------ + +# v0.4.x -- KlubKort (RFID Betalingskort) + +- RFID scanning ved betaling +- Konto-baseret saldo +- card = searchkey struktur +- Offline funktionalitet + +KlubKort implementeret som betalingsmiddel. Ikke login-system. + +------------------------------------------------------------------------ + +# v0.5.x -- Drift Manager & Backup + +- SUADMIN driftspanel +- Print-agent genstart +- Backup-script (hver time) +- Tunnel-baseret datasikring +- Transaktionsvisning mellem datoer + +Systemet blev driftsmodent. + +------------------------------------------------------------------------ + +# v0.6.0 Beta -- Statistik & Stabilisering + +- Webbaseret statistikpanel +- Salg pr. produkt +- Omsætningsoverblik +- Semi-live synkronisering (1 time) +- Forbedret betalingsflow +- UI-forbedringer +- Stabilitet under høj belastning + +Systemet anvendes nu aktivt ved events. + +------------------------------------------------------------------------ + +# Arkitekturudvikling + +Fra monolitisk PHP-løsning → Til modulopdelt struktur med: + +- Separat Print Agent +- Backup-agent +- SUADMIN kontrolpanel +- Web-statistik backend + +------------------------------------------------------------------------ + +# Hvorfor Beta? + +v0.6.0 betegnes Beta fordi: + +- Ingen real-time synkronisering endnu +- Ingen multi-terminal support +- Ingen lagerstyring +- UI kan stadig forbedres + +Systemet er dog fuldt funktionsdygtigt og stabilt. + +------------------------------------------------------------------------ + +# Næste Milepæl -- v1.0 + +Planlagte mål: + +- Realtids dashboard +- Lagerstyring +- Multi-terminal support +- Central administrationsserver +- Forbedret rapportering +- Versionssigneret release + +------------------------------------------------------------------------ + +# Konklusion + +TuxiNet Terminal er udviklet fra en simpel prototype til et stabilt, +event-klart POS-system. + +v0.6.0 Beta repræsenterer en moden og driftsklar platform, klar til +videreudvikling mod v1.0. diff --git a/docs/SECURITY.md b/docs/SECURITY.md new file mode 100644 index 0000000..c983c9c --- /dev/null +++ b/docs/SECURITY.md @@ -0,0 +1,43 @@ +# Security & Data Handling + +Version: v0.6.0 Beta + +------------------------------------------------------------------------ + +## Design Principles + +- Offline-first architecture +- No external API dependency required +- Local database storage +- Segmented Print Agent process + +------------------------------------------------------------------------ + +## Data Storage + +- Transaction data stored locally +- Backup performed hourly +- No public exposure of POS interface + +------------------------------------------------------------------------ + +## Network + +- Optional secure tunnel for backup transfer +- No inbound public access required + +------------------------------------------------------------------------ + +## Access Control + +- SUADMIN restricted access +- No public login system +- KlubKort used for payments only + +------------------------------------------------------------------------ + +## Recommendations + +- Restrict physical access to terminal +- Secure Windows account +- Regularly verify backups diff --git a/docs/funktioner.md b/docs/funktioner.md new file mode 100644 index 0000000..7a04c90 --- /dev/null +++ b/docs/funktioner.md @@ -0,0 +1,170 @@ +# TuxiNet Terminal + +## Funktionsbeskrivelse & Systemarkitektur + +Version: 2.0\ +Dato: 2026-02-20\ +Udviklet af: TuxiNet.dk + +------------------------------------------------------------------------ + +# 1. Systemoversigt + +TuxiNet Terminal er et event-optimeret POS-system designet til: + +- LAN parties +- Skolefester +- Foreninger +- Midlertidige events +- Offline miljøer + +Systemet er bygget med fokus på: + +- Offline-first drift +- Touch-optimeret brugerflade +- Stabilitet under høj belastning +- Automatisk backup +- Separat print-agent arkitektur + +------------------------------------------------------------------------ + +# 2. Overordnet Arkitektur + +Touchskærm\ +→ Chromium (Kiosk Mode)\ +→ Apache / XAMPP\ +→ LANPOS PHP Backend\ +→ Database (SQLite/MySQL)\ +→ Print Agent\ +→ USB Kvitteringsprinter\ +→ Pengeskuffe + +------------------------------------------------------------------------ + +# 3. Kernefunktioner + +## Salgsmodul + +- Produktkategorier +- Touch-betjening +- Flere varer i kurv +- Slet vare fra kurv +- Automatisk totalberegning +- Numerisk tastatur ved betaling +- Kvitteringsprint +- Automatisk åbning af pengeskuffe + +------------------------------------------------------------------------ + +## Betalingsmetoder + +- Kontant +- MobilePay (registreres som Card internt) +- KlubKort (RFID betalingskort) +- Gratis + +------------------------------------------------------------------------ + +## RFID KlubKort Modul + +KlubKort fungerer udelukkende som betalingskort. + +Det er ikke et login-system og giver ingen rettigheder. + +Funktion: + +- Scan kort ved betaling +- Kundekonto identificeres +- Saldo vises +- Beløb trækkes +- Transaktion registreres +- Bon kan udskrives + +Teknisk: + +- card = searchkey +- Ingen session +- Ingen bruger-login +- Offline funktionalitet + +------------------------------------------------------------------------ + +## Print Agent + +Separat Windows-agent som: + +- Modtager printjobs +- Sender ESC/POS direkte til printer +- Åbner pengeskuffe +- Logger fejl +- Kan genstartes via SUADMIN + +------------------------------------------------------------------------ + +## Webbaseret Statistikpanel + +Ekstern webvisning af salgsdata. + +Funktioner: + +- Total omsætning +- Salg pr. produkt +- Antal solgte enheder +- Betalingsfordeling +- Datofiltrering + +Opdatering: + +- Synkroniseres én gang i timen +- Semi-live visning + +------------------------------------------------------------------------ + +## Backup Modul + +- Automatisk backup hver time +- Sendes via sikker tunnel +- Versionssikret + +------------------------------------------------------------------------ + +## SUADMIN Drift Manager + +- Genstart af print agent +- Servicefunktioner +- Systemstatus +- Driftsoverblik + +------------------------------------------------------------------------ + +# 4. Driftstilstande + +Normal drift\ +Service mode\ +Offline mode + +------------------------------------------------------------------------ + +# 5. Hardwarekrav + +Minimum: + +- 4 GB RAM (8 GB anbefales) +- SSD +- USB kvitteringsprinter (ESC/POS) +- Pengeskuffe via printer +- Touchskærm + +------------------------------------------------------------------------ + +# 6. Moduloversigt + + Modul Funktion Kritisk Status + -------------------- -------------------- --------- -------- + Salg Håndterer salg Ja Aktiv + Print Agent Udskriver bon Ja Aktiv + Backup Datasikring Ja Aktiv + RFID KlubKort Konto-betaling Ja Aktiv + Web Statistikpanel Omsætningsoversigt Nej Aktiv + SUADMIN Drift kontrol Nej Aktiv + Startup Script Autostart Ja Aktiv diff --git a/docs/manual.md b/docs/manual.md new file mode 100644 index 0000000..8694a06 --- /dev/null +++ b/docs/manual.md @@ -0,0 +1,77 @@ +# TuxiNet Terminal + +## Brugermanual + +Version: 2.0\ +Dato: 2026-02-20 + +------------------------------------------------------------------------ + +# 1. Opstart + +1. Tænd maskinen +2. Systemet starter automatisk +3. Når produktsiden vises er systemet klar + +Hvis systemet ikke starter korrekt: Kontakt teknisk ansvarlig. + +------------------------------------------------------------------------ + +# 2. Opret salg + +1. Tryk på ønsket produkt +2. Produktet vises i kurven +3. Tilføj flere varer hvis nødvendigt +4. Tryk "Betal" + +------------------------------------------------------------------------ + +# 3. Kontant betaling + +1. Tryk "Kontant" +2. Indtast modtaget beløb +3. Byttepenge vises automatisk +4. Bon printes +5. Pengeskuffen åbner + +------------------------------------------------------------------------ + +# 4. MobilePay + +1. Tryk "MobilePay" +2. Kunden betaler +3. Bekræft betaling +4. Bon printes + +------------------------------------------------------------------------ + +# 5. Betaling med KlubKort + +1. Tryk "Betal" +2. Scan KlubKort +3. Saldo vises +4. Beløb trækkes +5. Bon printes + +------------------------------------------------------------------------ + +# 6. Slet vare + +Tryk på "X" ud for varen i kurven. + +------------------------------------------------------------------------ + +# 7. Hvis printer ikke virker + +- Tjek papir +- Tjek at printer er tændt +- Kontakt teknisk ansvarlig + +------------------------------------------------------------------------ + +# 8. Lukning + +- Luk systemet normalt +- Sluk maskinen + +Backup sker automatisk. diff --git a/finance/TuxiNet_3Year_Financial_Model.xlsx b/finance/TuxiNet_3Year_Financial_Model.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b119d3d915898f0a589ac86d99f625ce19e49bfd GIT binary patch literal 7285 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 literal 0 HcmV?d00001 diff --git a/pitch/TuxiNet_Pitch_Deck_v2.pptx b/pitch/TuxiNet_Pitch_Deck_v2.pptx new file mode 100644 index 0000000000000000000000000000000000000000..766140b81d7bccb0f20fa2391fa4808ae88ac7f8 GIT binary patch literal 32603 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

^DCq= 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 literal 0 HcmV?d00001 diff --git a/releases/GIT_RELEASE_v0.6.0.md b/releases/GIT_RELEASE_v0.6.0.md new file mode 100644 index 0000000..07b6dfb --- /dev/null +++ b/releases/GIT_RELEASE_v0.6.0.md @@ -0,0 +1,46 @@ +# 🚀 TuxiNet Terminal v0.6.0 Beta + +Release Date: 2026-02-20 + +## Summary + +This release marks a stable and event-tested milestone of TuxiNet +Terminal. The system is now production-proven at live events and +includes: + +### ✨ Highlights + +- Web-based statistics panel +- Semi-live hourly sync +- KlubKort (RFID payment support) +- Stable ESC/POS printing +- Automatic hourly backup +- SUADMIN Drift Manager + +------------------------------------------------------------------------ + +## 🔧 Improvements + +- Improved payment flow +- Enhanced print stability +- Backup reliability improvements +- UI optimizations + +------------------------------------------------------------------------ + +## âš  Known Limitations + +- No real-time dashboard +- No multi-terminal sync +- No inventory management + +------------------------------------------------------------------------ + +## Status + +Production-tested at live events. Marked as Beta pending advanced +feature completion. + +------------------------------------------------------------------------ + +Maintained by TuxiNet.dk diff --git a/releases/RELEASE_NOTES_v0.6.0.md b/releases/RELEASE_NOTES_v0.6.0.md new file mode 100644 index 0000000..2dec9ca --- /dev/null +++ b/releases/RELEASE_NOTES_v0.6.0.md @@ -0,0 +1,47 @@ +# TuxiNet Terminal -- Release Notes + +## v0.6.0 Beta + +Release Date: 2026-02-20 + +------------------------------------------------------------------------ + +## Overview + +v0.6.0 Beta represents a stable and event-ready milestone in the +development of TuxiNet Terminal. + +This version introduces the web-based statistics panel and includes +significant stability and usability improvements. + +------------------------------------------------------------------------ + +## New Features + +- Web-based statistics panel +- Semi-live hourly synchronization +- Improved payment flow +- Enhanced UI stability + +------------------------------------------------------------------------ + +## Improvements + +- Optimized print handling +- Improved backup stability +- Refined KlubKort processing + +------------------------------------------------------------------------ + +## Known Limitations + +- No real-time sync +- No multi-terminal support +- No inventory management + +------------------------------------------------------------------------ + +## Status + +System is production-tested at live events. Marked as Beta due to +pending advanced features. diff --git a/releases/TuxiNet_Terminal_Branded_Whitepaper.pdf b/releases/TuxiNet_Terminal_Branded_Whitepaper.pdf new file mode 100644 index 0000000..f3f31a2 --- /dev/null +++ b/releases/TuxiNet_Terminal_Branded_Whitepaper.pdf @@ -0,0 +1,80 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260220182739+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260220182739+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 1 /Kids [ 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 570 +>> +stream +Gat$u?#Q2d'Re<2\<$%,;!d]IfW;,QF`"^EW\8X;_M*:l+#AY2J%l@Z9LCDVA-lZdmQ&=CCGW2/Yl8ph!7h`ehCr=WU'-in3=pUm0@AeBJfVVu"7R=C"[Nu%"T`cWk]B+uCo!iCN2S_?TVLMZ,I(]K+P2W44S$$l\h/b0`gG^5PY92VF<*TnJ#[cLXMXO2ha:S-lThE.<0p'A@pM%?1YA%oXS9nU$>phNotnPe-*n(Bl$&G[YEPg"-886m+K#'0m-Rk9jsR&&(H`)t,$g5IM`3KJ%p=T%Q*>b@)(s+U'Tcj9A7>Uumf`EhY+Kh4O66.E,K^(5FfhVT(%^sgQqos"(e,mAIWG-U]JCN9,HQc&^oquWm)'doD.HJiHV#m&6jR-f%s0iW=X%rauN`TFAF3TK[qhendstream +endobj +xref +0 10 +0000000000 65535 f +0000000073 00000 n +0000000124 00000 n +0000000231 00000 n +0000000343 00000 n +0000000462 00000 n +0000000665 00000 n +0000000733 00000 n +0000001016 00000 n +0000001075 00000 n +trailer +<< +/ID +[<818fd8c87b724a699fb8b2c8a2cad09b><818fd8c87b724a699fb8b2c8a2cad09b>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 7 0 R +/Root 6 0 R +/Size 10 +>> +startxref +1735 +%%EOF diff --git a/releases/TuxiNet_Terminal_Event_Agreement.pdf b/releases/TuxiNet_Terminal_Event_Agreement.pdf new file mode 100644 index 0000000..e72c88d --- /dev/null +++ b/releases/TuxiNet_Terminal_Event_Agreement.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260220155639+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260220155639+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 645 +>> +stream +GasJO_/>`-&;KY&MZ;o45[!A3:2dD+St[WMkq,f?L;@[.]4?,jbM.4VLlG]N23K8uI/eRMK*>_u7/rh.^cKHTY6#n6>!OX5"k!Y2VmEk#(n\HDiFX7-e`q=s"+%#L9I%:VK=Y^>S*F4TuE:e=R,]7rXdAunF`^0"J+/.CN/X:s9Q[iduV)14-P)pQP/$FnT.#c-b=DRV&D]s65du]idms=LIl`Y3h]/Wt`1"PFIo+e'6'GT8^%TndL#UrhsSb#gUDB5eAWl'S26BkuX,eRit&k[MVL!8bJ1/EXX%4aKF6\I?],\30[bic);ntW_B'DPLZVm:@n@qh?BjEL[%T0Y'8Op'kmj;j;YM'O\X&"qKGn>f$`^?Y=56O#:%7HSNs1:\koAsdu@795],1VQr)j:+C5NAWe#9er"HehVSh)q[&FXZ&*bYRF;^lt\YD>WK?o:0P.f=b*>P.ZWIC4>#I,'H":ujf`=/)d_\\gsp&M>lG^Y%D[T6>.b+]Ja_Yendstream +endobj +xref +0 9 +0000000000 65535 f +0000000073 00000 n +0000000114 00000 n +0000000221 00000 n +0000000333 00000 n +0000000536 00000 n +0000000604 00000 n +0000000887 00000 n +0000000946 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1681 +%%EOF diff --git a/releases/TuxiNet_Terminal_Whitepaper_v0.6.0.pdf b/releases/TuxiNet_Terminal_Whitepaper_v0.6.0.pdf new file mode 100644 index 0000000..34372ab --- /dev/null +++ b/releases/TuxiNet_Terminal_Whitepaper_v0.6.0.pdf @@ -0,0 +1,99 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +7 0 obj +<< +/PageMode /UseNone /Pages 9 0 R /Type /Catalog +>> +endobj +8 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260220155753+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260220155753+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +9 0 obj +<< +/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages +>> +endobj +10 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1206 +>> +stream +Gat=*9lo;R&A@7.oJ*rm*)$:l84$4Das=k7Cs=$`,&A.(O_mRRRoHeG7cnWR;'M*%,;/-/<0'ZO.bV^r]b!j/-+0bMN(4Vb]J)f^%(/.Nu=\_Y!r,*DWi7kTV(;T[Pd!W_h>epqC6eJtFkdYTL2=&-mqQpook71sp4"SIRCU*6I+:d2?ntaiGb@+`?3E&X*#WHqDFq=Ze&e9F7IOg<)P(9K]'u7;kd%d[9lADJnq`9LlA3)5@%OnU"WkbP-&'?GeU>V]S'Po4od*3j&WSc#9cpEZ9b6hS/SkmnNUQ:!p0n[eH?U^a!dUaUAW^HIE+:QOJ.:HmD'$ZA(:)0%kUB"%'L;_44rn4TLu/:@/<.A\EIBQ%j5O%o\k#h3?3S9(VuU^!d>T+4'tT9V3At@B)_miJA:c`RXJdJ!IF)NU<-[dh;C:?]IfUUbLCoMb8o'65Tmp>o[/^G3Pgc&*mbQOaIDrW7;7Jbn)a_J9K'K*KLHeWEgB2/irj3(W#)I>^kMnmO/aKdX+Q/i40!iMG7o/Hnp%&g5cYZ,2K^mT/BdTT;I`*H\Z##Ad?D6&6?`Fendstream +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 85 +>> +stream +GapQh0E=F,0U\H3T\pNYT^QKk?tc>IP,;W#U1^23ihPEM_H"Zg#ZYSVTjVbIUh=4HB`Z`"(!*5e"T[<4%>O~>endstream +endobj +xref +0 12 +0000000000 65535 f +0000000073 00000 n +0000000124 00000 n +0000000231 00000 n +0000000343 00000 n +0000000420 00000 n +0000000624 00000 n +0000000828 00000 n +0000000896 00000 n +0000001179 00000 n +0000001244 00000 n +0000002542 00000 n +trailer +<< +/ID +[<3f69c5d8bee9f59be746c2ecad21bcaf><3f69c5d8bee9f59be746c2ecad21bcaf>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 8 0 R +/Root 7 0 R +/Size 12 +>> +startxref +2717 +%%EOF diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/backup/.gitkeep b/src/backup/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/database/.gitkeep b/src/database/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/lanpos/.gitkeep b/src/lanpos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/scripts/.gitkeep b/src/scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/wiki/INDEX.md b/wiki/INDEX.md new file mode 100644 index 0000000..dbb8252 --- /dev/null +++ b/wiki/INDEX.md @@ -0,0 +1,14 @@ +# Wiki Index – TuxiNet Terminal (v0.6.0 Beta) + +- Home: WIKI_Home.md +- Frontpage: WIKI_Frontpage_Styled.md +- Installation: WIKI_Installation.md +- Hardware & Arkitektur: WIKI_Hardware_Arkitektur.md +- KlubKort: WIKI_KlubKort.md +- Print Agent: WIKI_PrintAgent.md +- SUADMIN: WIKI_SUADMIN.md +- Backup: WIKI_Backup.md +- Statistikpanel: WIKI_Statistikpanel.md +- Event Deployment: WIKI_Event_Deployment.md +- Service Manual: WIKI_Service_Manual.md +- Fejlsøgning: WIKI_Fejlsoegning.md diff --git a/wiki/WIKI_Backup.md b/wiki/WIKI_Backup.md new file mode 100644 index 0000000..9d30bfd --- /dev/null +++ b/wiki/WIKI_Backup.md @@ -0,0 +1,13 @@ +# Backup System + +Version: v0.6.0 Beta + +## Funktion + +- Automatisk backup hver time +- Overførsel via sikker tunnel +- Versionssikring + +## Script + +lanpos_backup.ps1 diff --git a/wiki/WIKI_Event_Deployment.md b/wiki/WIKI_Event_Deployment.md new file mode 100644 index 0000000..7392e2b --- /dev/null +++ b/wiki/WIKI_Event_Deployment.md @@ -0,0 +1,26 @@ +# Event Deployment Guide + +Version: v0.6.0 Beta + +## Før Event + +- Test printer +- Test KlubKort scanning +- Verificér backup kører +- Tjek statistikpanel + +------------------------------------------------------------------------ + +## Under Event + +- Brug kun touch +- Luk ikke browser +- Kontakt tekniker ved fejl + +------------------------------------------------------------------------ + +## Efter Event + +- Kontrollér backup +- Eksportér data hvis nødvendigt +- Sluk system korrekt diff --git a/wiki/WIKI_Fejlsoegning.md b/wiki/WIKI_Fejlsoegning.md new file mode 100644 index 0000000..1a15f79 --- /dev/null +++ b/wiki/WIKI_Fejlsoegning.md @@ -0,0 +1,20 @@ +# Fejlsøgning + +Version: v0.6.0 Beta + +## Printer virker ikke + +- Tjek papir +- Tjek USB-forbindelse +- Genstart Print Agent + +## System starter ikke + +- Tjek XAMPP +- Kør lanpos_startup.ps1 manuelt +- Kontroller logs + +## KlubKort registreres ikke + +- Tjek USB RFID-læser +- Kontroller databaseforbindelse diff --git a/wiki/WIKI_Frontpage_Styled.md b/wiki/WIKI_Frontpage_Styled.md new file mode 100644 index 0000000..b39a293 --- /dev/null +++ b/wiki/WIKI_Frontpage_Styled.md @@ -0,0 +1,34 @@ +# TuxiNet Terminal Wiki + +**Version:** v0.6.0 Beta\ +**Status:** Beta + +------------------------------------------------------------------------ + +## System Features + +✔ Offline First\ +✔ Touch Optimized\ +✔ KlubKort (RFID Betaling)\ +✔ ESC/POS Print\ +✔ Automatisk Backup\ +✔ Web Statistikpanel + +------------------------------------------------------------------------ + +## Navigation + +- Installation +- Hardware & Arkitektur +- KlubKort +- Print Agent +- SUADMIN +- Backup +- Statistikpanel +- Event Deployment +- Service Manual +- Fejlsøgning + +------------------------------------------------------------------------ + +Professionel event-klar POS platform udviklet af TuxiNet. diff --git a/wiki/WIKI_Hardware_Arkitektur.md b/wiki/WIKI_Hardware_Arkitektur.md new file mode 100644 index 0000000..14e1670 --- /dev/null +++ b/wiki/WIKI_Hardware_Arkitektur.md @@ -0,0 +1,28 @@ +# Hardware & Arkitektur + +Version: v0.6.0 Beta + +## Hardware Krav + +- Windows PC (min 4GB RAM, 8GB anbefalet) +- SSD +- USB ESC/POS Kvitteringsprinter +- Pengeskuffe via printer +- USB RFID-læser +- Touchskærm + +------------------------------------------------------------------------ + +## Arkitektur + +Touch → Chromium (Kiosk) → XAMPP → LANPOS Backend → Database\ +→ Print Agent → Printer → Pengeskuffe + +------------------------------------------------------------------------ + +## Designprincipper + +- Offline-first +- Modulopdelt arkitektur +- Separat Print Agent +- Timebaseret backup diff --git a/wiki/WIKI_Home.md b/wiki/WIKI_Home.md new file mode 100644 index 0000000..360a7f9 --- /dev/null +++ b/wiki/WIKI_Home.md @@ -0,0 +1,21 @@ +# TuxiNet Terminal Wiki + +Velkommen til den tekniske dokumentation for TuxiNet Terminal v0.6.0 +Beta. + +------------------------------------------------------------------------ + +## Wiki Indhold + +- Systemoversigt +- Installation & Setup +- Drift & Service +- KlubKort (RFID) +- Print Agent +- Backup System +- Statistikpanel +- Fejlsøgning + +------------------------------------------------------------------------ + +For fuld versionshistorik se ROADMAP.md i repository. diff --git a/wiki/WIKI_Installation.md b/wiki/WIKI_Installation.md new file mode 100644 index 0000000..4cc3ea5 --- /dev/null +++ b/wiki/WIKI_Installation.md @@ -0,0 +1,24 @@ +# Installation & Setup + +## Krav + +- Windows system +- XAMPP installeret +- Chromium +- USB ESC/POS printer +- Touchskærm + +------------------------------------------------------------------------ + +## Første Opstart + +1. Installer afhængigheder +2. Placér projektfiler i korrekt mappe +3. Kør lanpos_startup.ps1 +4. Systemet starter automatisk + +------------------------------------------------------------------------ + +## Service Mode + +Startup script kan deaktiveres for debug. Print agent kan køres manuelt. diff --git a/wiki/WIKI_KlubKort.md b/wiki/WIKI_KlubKort.md new file mode 100644 index 0000000..1f7202f --- /dev/null +++ b/wiki/WIKI_KlubKort.md @@ -0,0 +1,22 @@ +# KlubKort (RFID Betalingskort) + +Version: v0.6.0 Beta + +## FormÃ¥l + +KlubKort anvendes som betalingskort med saldo. Det er ikke et login- +eller adgangssystem. + +## Funktion + +- Scan kort ved betaling +- Konto identificeres +- Saldo vises +- Beløb trækkes +- Transaktion logges + +## Teknisk Struktur + +- card = searchkey +- Offline funktionalitet +- Ingen session diff --git a/wiki/WIKI_PrintAgent.md b/wiki/WIKI_PrintAgent.md new file mode 100644 index 0000000..7e1e428 --- /dev/null +++ b/wiki/WIKI_PrintAgent.md @@ -0,0 +1,14 @@ +# Print Agent + +Version: v0.6.0 Beta + +## Funktion + +- Modtager printjobs +- Sender ESC/POS kommandoer +- Ã…bner pengeskuffe +- Logger fejl + +## Drift + +Kan genstartes via SUADMIN eller restart_agent.ps1 diff --git a/wiki/WIKI_SUADMIN.md b/wiki/WIKI_SUADMIN.md new file mode 100644 index 0000000..23900ce --- /dev/null +++ b/wiki/WIKI_SUADMIN.md @@ -0,0 +1,14 @@ +# SUADMIN Drift Manager + +Version: v0.6.0 Beta + +## FormÃ¥l + +Internt driftspanel til service og fejlhÃ¥ndtering. + +## Funktioner + +- Genstart print agent +- Systemstatus +- Serviceværktøjer +- Overblik over drift diff --git a/wiki/WIKI_Service_Manual.md b/wiki/WIKI_Service_Manual.md new file mode 100644 index 0000000..411953d --- /dev/null +++ b/wiki/WIKI_Service_Manual.md @@ -0,0 +1,24 @@ +# Service Manual (Intern) + +Version: v0.6.0 Beta + +## Debug Mode + +- Deaktivér startup script +- Kør print agent manuelt +- Kontrollér logs + +------------------------------------------------------------------------ + +## Print Problemer + +- Genstart agent +- Test ESC/POS direkte +- Tjek USB device manager + +------------------------------------------------------------------------ + +## Database + +- Kontrollér database fil +- Verificér write permissions diff --git a/wiki/WIKI_Statistikpanel.md b/wiki/WIKI_Statistikpanel.md new file mode 100644 index 0000000..4039997 --- /dev/null +++ b/wiki/WIKI_Statistikpanel.md @@ -0,0 +1,14 @@ +# Webbaseret Statistikpanel + +Version: v0.6.0 Beta + +## Funktioner + +- Total omsætning +- Salg pr. produkt +- Betalingsfordeling +- Datofiltrering + +## Opdatering + +Synkroniseres én gang i timen (semi-live).