Landing:
- hero cu un singur CTA (scoase „Vezi cum arată", „Rezervă fără cont" și nota)
- „Spații deschise rezervării acum" pe poziția 2, în bandă evidențiată cu accent;
listează toate proprietățile publice active (fără filtrul list_on_landing)
- showcase-ul mutat în bandă neutră etichetată „Demonstrație" ca să nu se
confunde cu controale reale
Pagini publice:
- PublicNav.vue + PublicFooter.vue extrase și refolosite de Landing, LegalPage
și noul PublicShell.vue (login/register/book primesc header/footer de landing,
cu cele 8 teme; tokenii --color-* remapați la paleta landing în scope-ul shell)
- pe mobil: nav compact cu meniu hamburger (drawer ancorat dreapta, iconițe
lucide, închidere la tap în afară/Escape); logo-ul Romfast rămâne în footer
Fix-uri:
- QR-ul proprietății encodează URL-ul cu slug (fallback pe id)
- deep-link-urile către rutele manager/admin nu mai sar la /dashboard:
guard-ul așteaptă authStore.ready înainte de verificarea rolurilor
- drawer-ul nu se mai închidea singur la tap pe iconiță (listener pe pointerdown
+ gardă pentru target detașat după re-render)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Titlul din antetul landing-ului și al paginilor legale folosește acum
culoarea de brand (accentul temei active), lângă siglă, în loc de text
închis.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Redenumește titlul aplicației din „Space Booking" în „ROA Space”
(alături de iconița LayoutDashboard, aceeași ca favicon-ul) și îl
colorează cu accentul aplicației, în sidebar și în header-ul mobil.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Linkurile Contact (footer landing + pagini legale, referința din
Termeni) duc acum la https://romfast.ro/contact; pagina internă
/contact și ruta ei au fost eliminate
- Pe paginile legale doar sigla e link către homepage; titlul
„ROA Space" nu mai e link
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Activează linkurile din footer-ul landing-ului către pagini reale,
în stilul paginilor statice din autopass.
- Componentă comună LegalPage.vue: același antet (brand + selector
de temă), footer și paletă (8 teme) ca landing-ul, cu slot "prose"
- Logica temei extrasă în composable useLandingTheme (partajat de
landing și paginile legale, persistat în localStorage)
- Rute publice /termeni, /confidentialitate, /contact (fullBleed)
- Footer-ul (landing + pagini) trimite acum la aceste rute
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Revert antet/subsol Romfast din corpul aplicației (App.vue, adăugate
azi). Sigla Romfast apare acum doar în subsolul meniului expandabil,
aliniată la stânga, cu link către romfast.ro. Se afișează doar când
meniul e expandat; verificat pe desktop, tabletă și mobil.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
FullCalendar does not reliably convert named timezone events without
a timezone adapter plugin. Instead, we pre-convert UTC datetimes to
the user's display timezone using isoToLocalDateTime and pass them to
FullCalendar with timeZone:'UTC', which displays wall-clock values as-is.
Drag/drop handlers now use delta-based UTC calculation from extendedProps
to send correct UTC times to the API regardless of display timezone.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
FullCalendar treats naive datetime strings as already being in the
display timezone, causing double-offset. Appending 'Z' forces correct
UTC interpretation before conversion to user timezone.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implement complete multi-property architecture:
- Properties (groups of spaces) with public/private visibility
- Property managers (many-to-many) with role-based permissions
- Organizations with member management
- Anonymous/guest booking support via public API (/api/public/*)
- Property-scoped spaces, bookings, and settings
- Frontend: property selector, organization management, public booking views
- Migration script and updated seed data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix multiple dashboard and UI issues:
Frontend fixes:
- Fix sidebar remaining dark on light theme (add proper light/dark CSS variables)
- Fix DashboardCalendar blank/not showing events (use watch + calendar API instead of computed options)
- Fix upcoming bookings to include active and recent past (last 7 days) bookings
- Improve sidebar collapsed state UX (stack footer buttons vertically, full width)
Details:
- theme.css: Add light sidebar colors (white bg) for :root, keep dark colors for [data-theme="dark"]
- DashboardCalendar: Add watch on events, use calendarRef to update events via removeAllEvents/addEventSource
- Dashboard: Change upcoming filter from "startDate >= now" to "endDate >= 7 days ago"
- AppSidebar: Stack footer-actions vertically when collapsed for better visibility
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major Dashboard improvements focusing on active reservations and calendar view:
Frontend changes:
- Add ActiveBookings component showing in-progress bookings with progress bars
- Add DashboardCalendar component with read-only calendar view of all user bookings
- Refactor Dashboard layout: active bookings → stats grid → calendar → activity
- Remove redundant Quick Actions and Available Spaces sections
- Make Quick Stats compact (36px icons, 20px font) and clickable (router-link)
- Add datetime utility functions (isBookingActive, getBookingProgress, formatRemainingTime)
- Fix MyBookings to read status query parameter from URL
- Auto-refresh active bookings every 60s with proper cleanup
Backend changes:
- Add GET /api/bookings/my/calendar endpoint with date range filtering
- Fix Google Calendar sync in reschedule_booking and admin_update_booking
- Add Google OAuth environment variables to .env.example
Design:
- Dark mode compatible with CSS variables throughout
- Mobile responsive (768px breakpoint, 2-column stats grid)
- CollapsibleSection pattern for all dashboard sections
- Progress bars with accent colors for active bookings
Performance:
- Optimized API calls (calendar uses date range filtering)
- Remove duplicate calendar data loading on mount
- Computed property caching for stats and filtered bookings
- Memory leak prevention (setInterval cleanup on unmount)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Simplify BookingForm: remove recurring bookings, templates, and attachments
- Replace datetime-local with separate date/time inputs for better UX
- Convert inline forms to modals (Admin spaces, Users, SpaceDetail)
- Unify Create and Edit booking forms with identical styling and structure
- Add Space field to Edit modal (read-only)
- Fix calendar initial load and set week start to Monday
- Translate all form labels and messages to Romanian
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
All datetime values are stored in UTC but were displaying raw UTC times
to users, causing confusion (e.g., 10:00 Bucharest showing as 08:00).
This implements proper timezone conversion throughout the app using each
user's profile timezone setting.
Changes:
- Frontend: Replace local formatters with timezone-aware utilities
- Backend: Add timezone conversion to PUT /bookings endpoint
- FullCalendar: Configure to display events in user timezone
- Fix edit modal to preserve times when editing bookings
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>