diff --git a/.gitignore b/.gitignore index e9a3b23..b84d5f0 100755 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ user_guide_src/cilexer/build/* user_guide_src/cilexer/dist/* user_guide_src/cilexer/pycilexer.egg-info/* /vendor/ +application/config/service-account-key.json # IDE Files #------------------------- diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..42d22af --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,120 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project overview + +Online booking platform for Studio Beve (barber + beauty salon, Norway). Guests browse services, book appointments, and receive email confirmations. Admins manage services, workers, bookings, and schedules via an admin portal. Multilingual: Norwegian (`no`), English (`en`), Hungarian (`hu`). + +## Stack + +- **Framework**: CodeIgniter 3 (PHP MVC), entry point `index.php` +- **Database**: MySQL — credentials in `application/config/database.php` +- **Email**: PHPMailer 6 via `vendor/autoload.php` +- **Google Calendar**: `google/apiclient:^2.0`, service account key at `application/config/service-account-key.json` +- **Frontend**: jQuery, jQuery UI datepicker, moment.js, Font Awesome, Google reCAPTCHA +- **Dependencies**: managed via Composer (`composer.json`) + +## Development commands + +```bash +# Install/update PHP dependencies +composer install +composer update + +# No build step — PHP files are served directly by the web server +# No test runner is configured (composer.json has a test:coverage script but no tests exist) +``` + +Deployment is file-based: copy changed files to the live server. Database migrations must be run separately on the live MySQL instance. + +## Architecture + +### MVC layout + +| Layer | Location | Key files | +|-------|----------|-----------| +| Controllers | `application/controllers/` | `Pages.php` (public + booking), `Admin.php` (admin portal), `Login.php`, `UserManagement.php` | +| Models | `application/models/` | `Service_model.php` (services, workers, bookings, schedules), `User_model.php` (users, `sendEmail()`), `Log_model.php` | +| Views | `application/views/` | `pages/` (public), `admin/` (admin portal), `includes/` (shared skeletons) | +| Libraries | `application/libraries/` | `GoogleCalendar.php` (createEvent, updateEvent, deleteEvent — failures never break booking flow) | +| Config | `application/config/` | `routes.php`, `database.php`, `google_calendar.php` | + +### Public booking flow + +1. Guest selects services → worker → date/time → contact info (multi-step form) +2. POST to `booking-process` → validates → saves to DB → sends email → redirects to `booking-finished` +3. Confirmation email contains a unique manage link: `SITEURL + lang + /manage-booking/ + manage_token` + +### Guest self-management + +- Token in `bookings.manage_token` (VARCHAR 64, UNIQUE), generated via `bin2hex(random_bytes(16))` +- Routes: `(:any)/manage-booking/(:any)`, `manage-booking-process`, `manage-booking-cancel` +- 24h cutoff: modifications/cancellations blocked if appointment is less than 24h away +- Emails sent to guest + CC evelin@studiobeve.no on modify/cancel + +### AJAX endpoint + +`Pages::ajax()` handles all async requests: `getAvailableTimes`, `getAvailableWorkers`, etc. + +`getAvailableTimes($worker_id, $date, $servicelength)` excludes already-booked slots, enforces closing time (18:00), max 3-month booking window, and floating lunch breaks. + +### Worker scheduling + +- Regular hours in `worker_schedule` table +- Day-off/absence overrides in `worker_schedule_overrides` (`absence_type`: `vacation`, `sick`, `custom`, `other`; NULL = plain day-off) +- Floating lunch: `workers.lunch_window_start` / `lunch_window_end` — first free 30-min slot in window + +### Google Calendar + +Workers and Evelin get calendar events on new/modify/cancel bookings. Worker calendar IDs stored in `workers.google_calendar_id`. Booking event IDs stored in `bookings.gcal_event_id_worker` and `bookings.gcal_event_id_owner`. + +### Admin portal + +`Admin.php` handles all CRUD for services, workers, bookings, users, and the visual worker calendar (`workers/worker-calendar`). + +## View conventions + +- Pages use skeleton includes: `barber-skeleton-top/bottom.php` or `beauty-skeleton-top/bottom.php` +- Shared CSS: `assets/css/style.css` (booking UI), `assets/css/barber.css` / `beauty.css` (page-specific + responsive) +- Responsive breakpoint at **736px**: booking layout switches to stacked +- `.bookingButtonContainer` is `position: absolute; bottom: 10px` — must be inside a `position: relative` parent (`.BookingStepContainer`) +- `.workerTable` has `height: 85px` — override with `height: auto` when pre-rendering multiple workers statically +- `.bookingCalendar` and `.bookingResultsWrapper` use `float: left` — contain them with `overflow: auto` on the parent and `
-
+ - My name is Radvile, and I am a nail technician with a deep passion for nail design. My interest in nails began in 2018, and since then I have spent countless hours developing my skills. I specialize in nail extensions, strengthening, corrections, and creative designs – including 3D effects and the latest trends. + My name is Kateryna Kravchenko, I am 22 years old, originally from Ukraine, and I have been living in Norway for one year. I currently work as a nail technician at Studio Beve AS.
- I am a perfectionist, but also very friendly and open. It’s important to me that my clients feel relaxed and well taken care of. I love hearing about their ideas and wishes, and I always take the time to make sure the result is exactly what they dream of. + My interest in nails started already in childhood – I loved painting my nails, and when my mother noticed this, she signed me up for a nail technician course. Since then, this has become my passion and my profession.
- I want the visit with me to be not only about beautiful nails, but also about a pleasant experience – a little break from everyday life where you can relax, chat, and feel truly welcome. -
+ I have been working with nails since 2019, and I specialize in manicure, strengthening and nail design. I love minimalism and appreciate clean, precise, and high-quality results – it’s the details that create perfection. + ++ I truly love my job and enjoy making women’s hands even more beautiful. Comfort and quality are very important to me, and I always try to create a pleasant and relaxing atmosphere where my clients feel good and well taken care of. +
++ I keep up with trends, constantly learn new techniques, and love to develop myself so that every treatment I perform meets the highest standards. +
-
-
-
-
-
+
+
+
+
+
+
-
+ - A nevem Radvile, és szenvedélyesen foglalkozom körömdizájnnal, mint körömtechnikus. Az érdeklődésem a körmök iránt 2018-ban kezdődött, és azóta számtalan órát töltöttem a tudásom fejlesztésével. Körömhosszabbításra, erősítésre, korrekcióra és kreatív dizájnokra specializálódtam – beleértve a 3D hatásokat és a legújabb trendeket is. + A nevem Kateryna Kravchenko, 22 éves vagyok, Ukrajnából származom, és egy éve élek Norvégiában. Jelenleg körömtechnikusként dolgozom a Studio Beve AS-ben.
- Perfekcionista vagyok, ugyanakkor nagyon barátságos és nyitott. Számomra fontos, hogy a vendégeim ellazulva és gondoskodva érezzék magukat. Szeretek hallgatni a vendégek ötleteire és kívánságaira, és mindig időt szánok arra, hogy a végeredmény pontosan olyan legyen, amilyet megálmodtak. + A körmök iránti érdeklődésem már gyermekkoromban elkezdődött – imádtam lakkozni a körmeimet, és amikor édesanyám ezt észrevette, beíratott egy körmös tanfolyamra. Ettől kezdve ez vált a szenvedélyemmé és a hivatásommá.
- Azt szeretném, hogy a nálam tett látogatás ne csak a szép körmökről szóljon, hanem egy kellemes élmény is legyen – egy kis szünet a hétköznapokból, ahol az ember lazíthat, beszélgethet, és igazán otthon érezheti magát. + 2019 óta dolgozom körmösként, és a manikűrre, erősítésre és körömdizájnra specializálódom. Imádom a minimalizmust, és nagyra értékelem a tiszta, precíz és minőségi munkát – a részletek teremtik meg a tökéletességet. +
++ Nagyon szeretem a munkámat, és boldoggá tesz, hogy még szebbé tehetem a nők kezeit. Számomra a kényelem és a minőség kiemelten fontos, és mindig arra törekszem, hogy kellemes, nyugodt légkört teremtsek, ahol a vendégeim jól érzik magukat és gondoskodva vannak. +
++ Figyelem a trendeket, folyamatosan tanulok új technikákat, és imádok fejlődni, hogy minden kezelésem a lehető legmagasabb színvonalat képviselje.
-
-
-
-
-
+
+
+
+
+
+
-
+ - Mitt navn er Radvile, og jeg er en negletekniker med stor lidenskap for negledesign. Min interesse for negler startet i 2018, og siden da har jeg brukt utallige timer på å utvikle mine ferdigheter. Jeg spesialiserer meg på negleforlengelser, forsterkninger, korreksjoner og kreative design – inkludert 3D-effekter og de nyeste trendene. + Jeg heter Kateryna Kravchenko, jeg er 22 år gammel, kommer fra Ukraina, og har bodd i Norge i ett år. Nå jobber jeg som negletekniker ved Studio Beve AS.
- Jeg er en perfeksjonist, men samtidig veldig vennlig og åpen. For meg er det viktig at kundene mine føler seg avslappet og godt ivaretatt. Jeg elsker å høre om kunders ideer og ønsker, og jeg tar meg alltid tid til å sikre at resultatet blir akkurat slik de drømmer om. + Interessen min for negler startet allerede i barndommen – jeg elsket å lakke neglene mine, og da mamma la merke til det, meldte hun meg på kurs for negleteknikere. Siden da har dette blitt min store lidenskap og mitt yrke.
- Jeg vil at besøket hos meg ikke bare skal handle om vakre negler, men også om en hyggelig opplevelse – et lite pusterom fra hverdagen, hvor man kan slappe av, prate og føle seg velkommen. + Jeg har jobbet med negler siden 2019, og jeg spesialiserer meg på manikyr, forsterkning og negledesign. Jeg elsker minimalisme, og verdsetter rene, presise og kvalitetsmessige resultater – det er detaljene som skaper perfeksjon.
- ++ Jeg er utrolig glad i jobben min og elsker å gjøre kvinners hender enda vakrere. For meg er komfort og kvalitet veldig viktig, og jeg prøver alltid å skape en behagelig og avslappet atmosfære, der kundene mine føler seg vel og tatt godt vare på. +
++ Jeg følger med på trender, lærer stadig nye teknikker og elsker å utvikle meg, slik at hver behandling jeg gjør, holder høyeste standard. +
-
-
-
-
-
+
+
+
+
+
+
- - Studio Beve AS åpnet dørene for noen måneder siden i Innheredsveien 92, i et godt - frekventert strøk. Vi er i utvikling, og med tanke på kundenes behov planlegger vi å - introdusere manikyrtjenester i fremtiden. Til det har vi arbeidsmiljø og utstyr av høyeste - kvalitet i vår moderne og nye skjønnhetssalong. Alt vi nå trenger er deg. -
-- Hvis du er en erfaren manikyrist og ditt arbeid er din lidenskap, ønsker vi å høre fra deg. -
-- Ettersom vi introduserer manikyr som en ny tjeneste i skjønnhetssalongen vår, er det vår - felles oppgave å bygge en kundekrets, men vi tror at våre nåværende tjenester er et godt - grunnlag for dette, for eksempel: øyenvippeforlengelser, PMU, styling av øyenvipper og - øyenbryn, voksing. -
-- Vi er på utkikk etter en ansatt på lang sikt, og etter hvert som kundekretsen vokser, ønsker vi - gradvis å nå 100% sysselsetting, derfor ønsker vi å ansette vår medarbeider med en ramme - på 20-100% sysselsetting. -
-- Vi trenger deg for å utvikle kundekretsen, og vi vil akselerere denne kundekretsutviklingen - med en målrettet markedsføringsstrategi. -
- Personlige egenskaper: -- Lønn etter antall arbeidstimer. Timelønn: 250 NOK -
-
- Om arbeidsgiveren:
- Vi er en skjønnhetssalong som tilbyr tjenester til både menn og kvinner. Vi anser det som
- viktig at våre gjester under oppholdet hos oss – mens de stenger ute litt av støyen fra
- omverdenen – kan lade sine batterier og kan vende tilbake til hverdagen forskjønnet både
- innvendig og utvendig. Kvalitetstid, maksimal oppmerksomhet, de mest profesjonelle
- verktøyene, hånd i hånd med profesjonalitet og kompetanse, utgjør grunnlaget for vår filosofi
- og våre tjenester. Vi mener at skjønnhet, mote og trend ikke er kjønnsspesifikke, og hos oss
- har derfor alle mulighet til å bli vakrere på ett sted, uavhengig av kjønn. Vi ønsker at gjestene
- våre skal finne de tjenestene som er riktige for dem.
-
- Tiltredelse:
Så raskt som mulig
-
- Hvordan søke:
- Send din CV, bilder og en kort søknad til evelin@studiobeve.no
- Vi ser frem til å høre fra deg!
-
- Kontaktperson:
- Evelin Bence,
- daglig leder
- Studio Beve AS
-
+
+ + Hos Studio Beve tilbyr vi både ansettelse og stolutleie. +
++ Studio Beve AS er en moderne skjønnhetssalong i Trondheim, lokalisert i Innherredsveien 92, i et godt frekventert og lett tilgjengelig område, med en stabil kundebase og et profesjonelt arbeidsmiljø. Salongen har vært i drift i snart to år, og har utviklet seg jevnt siden oppstarten. Vi tilbyr et moderne og stilrent arbeidsmiljø, profesjonelt utstyr og et velfungerende salongsystem. +
++ Våre nåværende tjenester inkluderer blant annet vippeextensions, PMU, styling av vipper og bryn, samt voksing. Negletjenester er allerede en del av tilbudet vårt, og vi ønsker nå å videreutvikle og styrke dette området i salongen. +
++ Derfor søker vi en erfaren og motivert negletekniker som ønsker å bli en del av et stabilt og voksende salongmiljø på lang sikt. Samarbeidet kan skje enten i form av ansettelse eller stolutleie, avhengig av kandidatens erfaring og ønsker. +
++ Kundebasen er i kontinuerlig vekst, og vi støtter utviklingen av tjenestene gjennom aktiv og målrettet markedsføring. +
+ Personlige egenskaper: +
+ Lønn eller leiepris avtales etter erfaring.
+ Vi ber kandidater oppgi lønnsforventning eller ønsket leiepris i søknaden.
+
+ Om arbeidsgiveren:
+ Vi er en skjønnhetssalong som tilbyr tjenester til både menn og kvinner. Vi anser det som
+ viktig at våre gjester under oppholdet hos oss – mens de stenger ute litt av støyen fra
+ omverdenen – kan lade sine batterier og kan vende tilbake til hverdagen forskjønnet både
+ innvendig og utvendig. Kvalitetstid, maksimal oppmerksomhet, de mest profesjonelle
+ verktøyene, hånd i hånd med profesjonalitet og kompetanse, utgjør grunnlaget for vår filosofi
+ og våre tjenester. Vi mener at skjønnhet, mote og trend ikke er kjønnsspesifikke, og hos oss
+ har derfor alle mulighet til å bli vakrere på ett sted, uavhengig av kjønn. Vi ønsker at gjestene
+ våre skal finne de tjenestene som er riktige for dem.
+
+ Tiltredelse:
Mai eller etter avtale
+
+ Hvordan søke:
+ Send din CV, bilder av arbeidet ditt og en kort søknad til: evelin@studiobeve.no
+
+ Vennligst oppgi også lønnsforventning eller ønsket leiepris i søknaden. +
++ Vi ser frem til å høre fra deg! +
+
+ Kontaktperson:
+ Evelin Bence,
+ daglig leder
+ Studio Beve AS
+