ByggArkiv - Specifikation

Översikt

ByggArkiv är en webbapplikation för dokumentation av byggprojekt genom fotografering och projektkommunikation. Systemet möjliggör enkel uppladdning och organisering av bilder från byggarbetsplatser med tillhörande metadata och anteckningar, samt realtidskommunikation via projektchatt (ByggChat) mellan projektmedlemmar, externa partners och administratörer.

Funktioner

Huvudfunktioner

1. Bilduppladdning (för snickare)

Syfte: Dokumentera byggarbete med foton och videor från arbetsplatsen

  • Multipla bilder och videor: Stöd för att välja och ladda upp flera bilder och videor samtidigt
  • Kamera och album: Möjlighet att ta bilder/videor direkt med kameran eller välja från befintligt album
  • Progressiv uppladdning: Bilder och videor laddas upp en i taget med statusindikator
  • Förhandsvisning: Visar valda bilder och videor innan uppladdning
  • Ta bort filer: Möjlighet att ta bort enskilda bilder/videor från uppladdningslistan
  • Användarspårning: Automatisk koppling av uppladdningar till specifika användare via URL-parametrar
  • Bildvalidering: Automatisk kontroll av bildformat (JPEG, PNG, HEIC, HEIF, WebP) och storlek (max 25 MB)
  • Videovalidering: Automatisk kontroll av videoformat (MP4, WebM, MOV, AVI) och storlek (max 32 MB)
  • Automatiska bildnummer: Varje bild och video tilldelas automatiskt ett unikt sekventiellt nummer
  • Säker filhantering: Automatisk generering av unika filnamn med tidsstämpel och hash

2. Dokumentuppladdning (för administratörer)

Syfte: Ladda upp projektdokument, specifikationer och kontrakt

  • Multipla dokument: Stöd för att välja och ladda upp flera dokument samtidigt
  • Projektkoppling: Automatisk koppling till valt projekt
  • Beskrivning: Möjlighet att beskriva dokumentets innehåll
  • Dokumentvalidering: Automatisk kontroll av dokumentformat (PDF, TXT, CSV) och storlek (max 25 MB)
  • Administrativ spårning: Alla dokument spåras till administratör
  • Säker filhantering: Automatisk generering av unika filnamn med tidsstämpel och hash

3. Projektorganisation

4. Anteckningar

5. Säkerhet

  • Flexibel autentisering: PIN-kod kan aktiveras eller inaktiveras (inaktiverad som standard)
  • Rate limiting: Skydd mot överdriven uppladdning (25 försök per 5 minuter per användare)
  • Säkerhetsheaders: XSS-skydd, Content Security Policy, Frame Options
  • Säkerhetsloggning: Automatisk loggning av säkerhetshändelser och misstänkt aktivitet
  • Filsäkerhet: Avancerad validering av filtyper, storlekar och MIME-typer
  • Användarstatus-kontroll: Endast aktiva användare kan ladda upp bilder
  • Filborttagning: Bilder tas bort permanent när de raderas
  • Session-hantering: Säker session-hantering med konfigurerbara timeouts

6. Bild- och videovisning och hantering

7. Användarhantering

8. Externa användare och partners

Syfte: Hantera underleverantörer, kunder och andra externa partners som kan bjudas in till projekt

  • Externa användare: Separata användare med typ extern
  • Företagshantering: Externa användare kan kopplas till företag
  • Yrkeskategorier: Externa användare kan tilldelas yrkeskategorier (Bygg, El, VVS, etc.)
  • Projektkoppling: Externa användare läggs till i projekt manuellt av administratörer
  • Begränsad projektåtkomst: Externa användare ser endast projekt de är medlemmar i
  • Nickname: Externa användare kan också ha nickname som visas i chatten
  • Pushover-stöd: Externa användare kan få notifikationer via Pushover
  • Behörighetskontroll: Externa användare kan inte automatiskt gå med i nya projekt

9. Projektchatt (ByggChat)

Syfte: Realtidskommunikation per projekt mellan projektmedlemmar, externa partners och administratörer

  • Textmeddelanden: Skicka textmeddelanden i projektchatter
  • Bildmeddelanden: Ladda upp bilder direkt i chatten
  • Pushover-notifikationer: Notifikationer till valda deltagare när meddelanden skickas
  • Brådskande meddelanden: Markera meddelanden som brådskande med visuell markering
  • Svara på meddelanden: Möjlighet att svara på specifika meddelanden med citat
  • Fästa meddelanden: Administratörer kan fästa viktiga meddelanden högst upp i chatten
  • Gilla meddelanden: Användare kan gilla meddelanden med visuell feedback
  • Deltagarhantering: Administratörer kan lägga till och ta bort deltagare
  • Automatisk deltagarhantering: Administratörer läggs automatiskt till i alla projektchatter
  • Projektväljare: Dropdown-meny för att växla mellan projekt
  • Systemmeddelanden: Automatiska meddelanden när deltagare läggs till eller tas bort
  • Arkiverade projekt: Read-only chattar för arkiverade projekt
  • Deltagarlista: Visar alla aktiva deltagare med färgkodning (grön för interna, röd för externa)
  • Notifikationshantering: Per deltagare och global notifikationsväxling
  • Meddelandefärger: Olika färger baserat på avsändartyp (externa partners: röd, interna: blå)
  • Automatisk uppdatering: Meddelanden uppdateras automatiskt var 5:e sekund
  • Chattöversikt: Administratörer kan se alla projektchatter med statistik

10. Administrativa funktioner

11. Systemmeddelanden

Syfte: Visa meddelanden för alla användare när de öppnar systemet

  • Skapa meddelanden: Administratörer kan skapa systemmeddelanden som visas för alla användare
  • Sista visningsdag: Automatisk döljning av meddelanden efter ett visst datum
  • Inkludera externa användare: Välj om meddelandet ska visas för externa partners
  • Statistik: Se hur många användare som har läst meddelandet
  • Hantering: Ta bort meddelanden och se utgångna meddelanden
  • Modal-visning: Meddelanden visas som modaler som måste bekräftas

12. Paketering och export

13. Avancerade funktioner

Tekniska specifikationer

Arkitektur

  • Modulär design: Separata PHP-filer för olika funktionaliteter
  • Datafunktioner: Centraliserad datahämtning och API-funktionalitet
  • Vyspecifika moduler:
    • Projektvisning - Visar bilder filtrerade på projekt
    • Användarvisning - Visar bilder filtrerade på användar-ID
    • Avancerad filtrering - Kombinerad filtrering med AND-operation
  • URL-baserad navigering: Varje filtrering har sin egen URL-parameter
  • Responsiv design: Modern CSS med Flexbox-layout och Media Queries för alla enheter
  • JavaScript-integration: Dynamisk funktionalitet utan ramverk-beroende
  • Deployment-system: Automatiserade verktyg för NAS-deployment

Filformat

Databasstruktur

uploads/
├── [projekt-id]/
│   ├── YYYYMMDD_HHMMSS_[hash].jpg
│   ├── YYYYMMDD_HHMMSS_[hash].mp4
│   ├── YYYYMMDD_HHMMSS_[hash].json
│   ├── YYYYMMDD_HHMMSS_[hash]-thumb.jpg
│   └── ...
├── attic/
│   ├── YYYYMMDD_HHMMSS_[hash].jpg
│   ├── YYYYMMDD_HHMMSS_[hash].json
│   └── ...
└── ...

data/
├── projects.json       # Projektlista med status
├── userids.json        # Användardata (inklusive nickname)
├── image_numbers.json  # Bildnummer-räknare
└── ...

chats/
├── [project_id]/
│   └── messages.json   # Chatmeddelanden per projekt
└── ...

project_mapping.json    # Projekt-deltagarmappning
chat_mapping.json       # Chat-deltagarmappning

downloads/
├── projekt_1001_2025-01-15_12-30-45.zip
└── ...

logs/
├── upload_limits.json    # Rate limiting data
├── security.log         # Säkerhetsloggar
└── ...

Metadata-struktur

{
  "project_id": "1001",
  "note": "Anteckning om bilden",
  "user_id": "micke",
  "original": "IMG_1234.jpg",
  "mime": "image/jpeg",
  "bytes": 2048576,
  "stored_file": "20250828_151008_00e590.jpg",
  "stored_at": "2025-08-28T15:10:08+02:00",
  "file_type": "image",
  "image_number": 42,
  "thumb_file": "20250828_151008_00e590-thumb.jpg",
  "upload_id": 1727536208
}

Användardata-struktur

[
  {
    "user_id": "micke",
    "full_name": "Micke Andersson",
    "nickname": "Micke",
    "mobile": "070-123 45 67",
    "user_type": "user",
    "active": true,
    "pushover_user_key": "u1234567890abcdefghijklmnop",
    "profile_image": "profile_micke.jpg",
    "created_at": "2025-01-15 10:30:00",
    "updated_at": "2025-01-20 14:15:00"
  }
]

Projektdata-struktur

[
  {
    "id": "1001",
    "name": "Villa Sjöblick, Storgatan 15",
    "status": "active",
    "description": "Nybyggnad villa",
    "start_date": "2025-01-15"
  },
  {
    "id": "1002",
    "name": "BRF Björken, Ekvägen 7",
    "status": "archived",
    "description": "Renovering",
    "start_date": "2024-06-01"
  }
]

Chatmeddelanden-struktur

[
  {
    "id": "1734456781_a1b2c3d4",
    "sender_type": "user|admin|extern",
    "participant_id": "user_id",
    "message": "Meddelandetext",
    "type": "text|image|system",
    "media_file": "filename.jpg",
    "priority": 2,
    "pinned": true,
    "likes": ["user_id1", "user_id2"],
    "reply_to": "message_id",
    "notified_users": ["user_id1", "user_id2"],
    "created_at": "2025-12-17T19:19:41+01:00"
  }
]

Deltagarmappning-struktur

[
  {
    "participant_id": "user_id",
    "type": "user|extern",
    "added_at": "2025-12-17T19:19:41+01:00",
    "added_by": "admin_user_id"
  }
]

URL-struktur för filtrering

API-endpoints

POST-endpoint för bilduppladdning (bilder och videor) med rate limiting
GET-endpoint för användarlista
POST-endpoint för CRUD-operationer på användare (inklusive nickname och profilbilder)
POST-endpoint för säker filborttagning
GET-endpoint för användarinformation
GET-endpoint för projektbilder och videor
GET-endpoint för användarstatus-kontroll
GET-endpoint för systemstatistik
POST-endpoint för projektpaketering (zip-arkiv)
POST-endpoint för bildnummer-tilldelning
POST/GET-endpoint för chat-meddelanden (list, send, upload_image)
POST/GET-endpoint för chat-deltagare (list, add, remove)
POST/GET-endpoint för externa användare (CRUD-operationer)
POST-endpoint för systemmeddelanden (create, delete, list)
GET-endpoint för aktivitetslogg med datumfiltrering
GET-endpoint för debiteringsberäkning
Automatisk loggning av säkerhetshändelser

Drift och underhåll

Systemkrav

Server

Klient

Deployment

Automatisk deployment till NAS

Säkerhet

Lösenordshantering

  • PIN-kod inaktiverad som standard: Ingen autentisering krävs för uppladdning
  • Aktivering av PIN-kod: Kan aktiveras via konfiguration
  • Session-hantering: Automatisk session-hantering med konfigurerbara timeouts
  • Säker filhantering: Rättighetskontroll och säker filnamnsgenerering
  • Dynamisk PIN-visning: PIN-fältet döljs automatiskt när lösenord inte krävs

Filsäkerhet

Nätverkssäkerhet

Backup och återställning

Backup-strategi

Underhåll

Regelbunden underhåll

Felsökning

Support och dokumentation

Dokumentationsstruktur

Användardokumentation

Teknisk dokumentation

Support