Ta dokumentacja zawiera szczegółowe informacje techniczne o platformie LibreMedia.
Architektura i projektowanie
LibreMedia to platforma dla twórców treści, umożliwiająca:
Publikowanie — posty, wideo, zdjęcia, strony statyczne
Monetyzację — subskrypcje premium, jednorazowe darowizny
Społeczność — obserwacje, komentarze, reakcje, powiadomienia
Wielojęzyczność — pełne wsparcie i18n (PL, EN, UK, LT, DE, FR, ES)
┌─────────────────────────────────────────────────┐
│ Frontend │
│ Hotwire (Turbo + Stimulus) · SCSS · Font Awesome│
├─────────────────────────────────────────────────┤
│ Backend │
│ Ruby on Rails 8.1.2 · Ruby 3.4.6 │
├─────────────────────────────────────────────────┤
│ Data Layer │
│ PostgreSQL 15+ · Redis 7+ · Elasticsearch 8.x │
├─────────────────────────────────────────────────┤
│ Services │
│ Sidekiq · Stripe · Action Cable │
└─────────────────────────────────────────────────┘
System ról obsługuje role globalne i kontekstualne (przypisane do konkretnego bloga). Szczegóły: features/users.md
Rola
Slug
Priorytet
Uprawnienia
Super Admin
super-admin
100
Pełny dostęp do systemu
Admin
admin
90
Zarządzanie użytkownikami, treścią, ustawieniami
Moderator
moderator
50
Moderacja treści i komentarzy
Author
author
30
Tworzenie i edycja własnych treści
User
user
10
Komentarze, obserwacje, reakcje
Guest
guest
0
Przeglądanie publicznych treści
Typ
Model
Opis
Post
Post
Artykuły tekstowe z formatowaniem
Video
Video
Materiały wideo (YouTube, upload)
Photo
Photo
Galerie zdjęć
Page
Page
Strony statyczne
Mechanizm
Opis
Subskrypcje
Miesięczne/roczne plany premium
Darowizny
Jednorazowe wpłaty na twórcę
Poziomy dostępu
Treści dostępne tylko dla subskrybentów
┌──────────────┐
│ CDN/Edge │
│ (CloudFlare)│
└──────┬───────┘
│
┌──────────────────────┴──────────────────────┐
│ │
┌────────▼────────┐ ┌─────────▼─────────┐
│ Web Server │ │ API Gateway │
│ (Nginx) │ │ (REST/JSON) │
└────────┬────────┘ └─────────┬─────────┘
│ │
└──────────────────────┬───────────────────────┘
│
┌────────▼────────┐
│ Rails App │
│ (Puma) │
└────────┬────────┘
│
┌───────────────┬───────────────┼───────────────┬───────────────┐
│ │ │ │ │
┌───────▼───────┐ ┌─────▼─────┐ ┌───────▼───────┐ ┌─────▼─────┐ ┌───────▼───────┐
│ PostgreSQL │ │ Redis │ │ Elasticsearch │ │ Sidekiq │ │ Stripe │
│ (Primary DB) │ │ (Cache) │ │ (Search) │ │ (Jobs) │ │ (Payments) │
└───────────────┘ └───────────┘ └───────────────┘ └───────────┘ └───────────────┘
Modele: CamelCase (np. PricePlan, MediaAttachment)
Tabele: snake_case, liczba mnoga (np. price_plans, media_attachments)
Kontrolery: PluralController (np. PostsController)
Widoki: snake_case (np. posts/show.html.slim)
app/
├── controllers/ # Kontrolery (Web + API)
│ ├── api/v1/ # API v1
│ └── concerns/ # Współdzielone moduły
├── models/ # Modele ActiveRecord
│ └── concerns/ # Współdzielone moduły (Sluggable, Translatable)
├── views/ # Widoki Slim
├── javascript/ # Stimulus controllers
│ └── controllers/
├── assets/
│ ├── stylesheets/ # SCSS
│ └── fonts/ # Font Awesome
├── policies/ # Pundit policies
└── services/ # Service objects
Wszystkie teksty UI są tłumaczalne. Pliki locale:
config/locales/pl.yml — Polski (domyślny)
config/locales/en.yml — English
config/locales/uk.yml — Українська
Modele z tłumaczeniami używają Translatable concern z polami *_i18n (JSONB).
© 2026 Webgate Systems LTD