AvalyzTest another app

7/7 pages

Sample report

Fictitious application built for the demonstration: no real data. Your report will follow the same structure.

Test my app

What breaks in your app

Riad Dar Zitoun

riad-connect-hub.lovable.app

Address tested: https://riad-connect-hub.lovable.app/ · 2026-10-09 · full run, write mode requested (test data only, never a real payment or a deletion) · 7 pages visited · 10 test levels · verdict computed as the publisher would · app under construction

NO-GO The dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal bookin See the reasoned decision

Summary report

Decision

NO-GOThe dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conclusive). With the booking path unproven and a reproduced defect on a client-facing promise, the site cannot be signed off as ready to take bookings.

The site is not ready to take bookings: the core money path was not validated end to end, and confirmed defects affect search, booking and review rules. Priority fixes should target invalid search validation, the review restriction, security headers and accessibility before re-testing the full funnel.

Key figures

7pages tested
23business cases played14 passed · 3 failed · 0 blocked
20findings0 Critical · 4 Major · 12 Minor · 4 Note

Fix first

  1. #1MajorBusiness scenario CL-3 failed: search with a past arrival date
    Past-date searches can still return a price, so a guest could try to book an unserviceable stay and the deposit flow is exposed to invalid bookings.
  2. #2MinorBusiness scenario CL-5 failed: search with adults above the maximum of 4
  3. #3MajorBusiness scenario CS-5 failed: signed-in guest tries to review without a past stay
    Without a past-stay gate, fake reviews can be published, damaging the guesthouse’s reputation and direct booking conversion.
  4. #4MajorLogin pages can be embedded in another site (clickjacking)
    The /auth page can be embedded in another site, enabling clickjacking and credential theft for guests and the manager.
  5. #5MinorMissing security headers

Next steps

  1. Fix the booking funnel validation and the review restriction, then re-run scenarios CN-1, CN-2, CS-20, CS-21, CS-22, CL-3, CL-5 and CS-5.
  2. Add the missing security headers and a consent banner that blocks non-essential cookies before consent.
  3. Complete the uncovered scenarios: CLI-02, CLI-03, CLI-04, ADM-01 and CL-10.
  4. Verify the 48-hour cancellation promise end to end.

Detailed report

Our understanding of the business (to be validated)

Analysis texts are shown in the language the analysis was written in.

This understanding was built from what the application shows; the business teams should validate it before it supports a decision.

Concept

Riad Dar Zitoun is a five-room guesthouse in the Medina of Marrakech selling direct room bookings online, with a 30% deposit paid through a simulated payment. It targets travellers (couples, small families, groups) who want a riad stay near the Koutoubia, promising transparent nightly prices, instant booking and free cancellation up to 48 h before arrival.

Target customers: Travellers seeking a guesthouse stay in the Medina of Marrakech (couples, small families, groups of 2 to 4 guests) and the riad manager who administers bookings, rooms, prices and messages.

Value chain

  1. AttractVIS-01, VIS-02, VIS-03
  2. ConvertCLI-01, CLI-02, CLI-03
  3. DeliverCLI-04, CLI-05
  4. Collect cashCLI-03, CLI-06
  5. RetainCLI-07, SUP-01
  6. AdministerADM-01, ADM-02, ADM-03, ADM-04

Business model

Customer segmentsTravellers to Marrakech: couples, small families and groups of 2 to 4 guests; direct bookers avoiding OTAs.
Value propositionA peaceful five-room riad by the Koutoubia, clear nightly prices in MAD, direct booking with a 30% deposit and free cancellation up to 48 h.
ChannelsOwn website (French with EN switch), room pages, availability search, contact form, FAQ, guest reviews.
Revenue streamsDirect room bookings per night in MAD, 30% deposit paid online (simulated), tourist tax 30 MAD per adult per night; promo RIAD10 -10% on accommodation.
Key partnersNone visible on the site; the client description mentions no external partner (payment is simulated).

Organisation

Functional org chart: application spaces and user profiles. ★ = profile used for testing.

  • riad-connect-hub.lovable.app
    • Public website (visitor)
      • Visitor (not signed in) VIS ★
    • Guest area (signed-in traveller)
      • Guest / traveller (signed-in customer) CLI ★
    • Manager back-office (announced, not seen)
      • Manager (only administrator) ADM

Functions

Function (profile)MissionMain responsibilitiesUsed for testing
Visitor (not signed in) VISDiscover the riad and its rooms and start an availability search without an account.
  • Consult room list and nightly prices
  • Run availability searches
  • Contact the riad
★ yes
Guest / traveller (signed-in customer) CLIBook a stay, pay the deposit and manage the booking until departure.
  • Complete a booking with correct dates and guests
  • Pay the 30% deposit online
  • Cancel at least 48 h before arrival if needed
★ yes
Manager (only administrator) ADMOperate the riad: keep the calendar, rooms, prices and guest messages under control.
  • Follow incoming bookings
  • Block unavailable dates
  • Maintain rooms, prices and messages
no

Domains

Business

  • Discovery and content VIS-01, VIS-03
  • Booking and availability VIS-02, CLI-01, CLI-02
  • Payment and deposit CLI-03, CLI-04
  • Stay and after-sales CLI-05, CLI-06

Support

  • Account and authentication ACC-01, ACC-02
  • Riad administration ADM-01, ADM-02, ADM-03, ADM-04
  • Customer support and contact SUP-01
  • Communication and reviews CLI-07

Map of macro-processes and processes

Macro-processProcessProfileOutcomesCoverage
Attract travellers
Business · Discovery and content
VIS-01 — Browse rooms and nightly pricesVIS✓ Five rooms and prices displayed, ✗ Page unavailablenot tested
VIS-03 — Read FAQ and reviewsVIS✓ FAQ questions and reviews page displayed, ✗ No answer shown under FAQ questiontested: compliant (CS-2)
Attract travellers
Business · Booking and availability
VIS-02 — Search availability by dates and guestsVIS✓ Availability results shown, ✗ Missing arrival or departure date, ✗ Departure before arrival, ✗ Guests exceed room capacitytested: defect (CS-1, CL-1, CL-2, CL-4, CL-5)
Sell a stay
Business · Booking and availability
CLI-01 — Choose a room and datesCLI✓ Room available for the dates, ✗ Room already booked on overlapping dates, ✗ Guests exceed room capacity, ✗ Dates in the past, ✗ Stay shorter than 1 nighttested: defect (CN-1, CL-3)
CLI-02 — Review booking summary with tax and promoCLI✓ Discounted total and tax shown, ✗ Invalid promo code, ✗ Promo applied to tourist taxnot tested
Sell a stay
Business · Payment and deposit
CLI-03 — Pay the 30% deposit onlineCLI✓ Deposit accepted, booking number issued, ✗ Payment refused, ✗ Payment abandoned by guest, ✗ Room taken before paymentnot tested
CLI-04 — Receive booking numberCLI✓ Booking number displayed, ✗ Confirmation not receivednot tested
Manage the stay
Business · Stay and after-sales
CLI-05 — Consult My bookingsCLI✓ Bookings listed, ✗ No booking yettested: compliant (CS-3)
CLI-06 — Cancel a bookingCLI✓ Booking cancelled, ✗ Less than 48 h before arrival, ✗ Cancellation refusednot played (CL-10)
Manage account
Support · Account and authentication
ACC-01 — Create an accountVIS✓ Account created, confirmation e-mail sent, ✗ Password shorter than 6 characters, ✗ E-mail already usednot tested
ACC-02 — Sign inVIS✓ Signed in, My bookings visible, ✗ Wrong credentials, ✗ Password shorter than 6 characterstested: compliant (CL-6, CL-7)
Operate the riad
Support · Riad administration
ADM-01 — Follow the booking calendarADM✓ New booking visible on calendar, ✗ Booking not found, ✗ Access denied to non-managernot tested
ADM-02 — Block datesADM✓ Dates blocked, ✗ Dates overlap an existing bookingnot tested
ADM-03 — Manage rooms and pricesADM✓ Room or price updated, ✗ Invalid price or capacitynot tested
ADM-04 — Read contact messagesADM✓ Message read, ✗ No message receivednot tested
Support guests
Support · Customer support and contact
SUP-01 — Send a contact messageVIS✓ Message sent, ✗ Missing name, e-mail or message, ✗ Invalid e-mailtested: compliant (CS-4, CL-8, CL-9)
Build trust
Support · Communication and reviews
CLI-07 — Publish a guest reviewCLI✓ Review published, ✗ Guest has not stayed at the riad, ✗ Not signed intested: defect (CS-5)

Key business rules by process

ProcessBusiness ruleSource
VIS-01 — Browse rooms and nightly pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.read on the site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.read on the site : « 900 MAD / nuit »
VIS-02 — Search availability by dates and guestsRG-03 — The search form requires an arrival date and a departure date.read on the site : « Arrivée Départ »
RG-04 — Adults are bounded between 1 and 4 and children between 0 and 3.read on the site : « Adultes Enfants »
RG-05 — The riad has five rooms around a patio of orange trees.to be confirmed
VIS-03 — Read FAQ and reviewsRG-06 — Only guests who have stayed at the riad may publish a review.read on the site : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
ACC-01 — Create an accountRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.read on the site : « E-mail Mot de passe »
RG-08 — Sign-up is with e-mail and password, with a confirmation e-mail.to be confirmed
ACC-02 — Sign inRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.read on the site : « E-mail Mot de passe »
CLI-01 — Choose a room and datesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.read on the site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.read on the site : « 900 MAD / nuit »
RG-09 — A room can never be booked twice on overlapping dates.to be confirmed
RG-10 — No booking in the past.to be confirmed
RG-11 — Minimum stay of 1 night.to be confirmed
CLI-02 — Review booking summary with tax and promoRG-12 — Tourist tax is 30 MAD per adult per night.to be confirmed
RG-13 — Promo code RIAD10 gives 10% off the accommodation only; the tourist tax is never discounted.to be confirmed
RG-14 — The 30% deposit is computed on the discounted total, tax included.to be confirmed
CLI-03 — Pay the 30% deposit onlineRG-15 — The deposit is 30% of the total and is paid online.to be confirmed
RG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.to be confirmed
RG-17 — The environment is a TEST environment, not production.to be confirmed
CLI-04 — Receive booking numberRG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.to be confirmed
CLI-05 — Consult My bookingsRG-18 — A signed-in guest sees 'Mes réservations' with 'Vous n'avez pas encore de réservation.' when empty.read on the site : « Vous n'avez pas encore de réservation. »
CLI-06 — Cancel a bookingRG-19 — Cancellation is allowed up to 48 hours before arrival.read on the site : « Annulation possible jusqu'à 48 h avant l'arrivée. »
CLI-07 — Publish a guest reviewRG-06 — Only guests who have stayed at the riad may publish a review.read on the site : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
RG-20 — Reviews page shows 'Aucun avis pour le moment.' when no review exists.read on the site : « Aucun avis pour le moment. »
SUP-01 — Send a contact messageRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).read on the site : « Nom complet E-mail Sujet Message »
ADM-01 — Follow the booking calendarRG-22 — The manager is the only administrator.to be confirmed
ADM-02 — Block datesRG-09 — A room can never be booked twice on overlapping dates.to be confirmed
RG-22 — The manager is the only administrator.to be confirmed
ADM-03 — Manage rooms and pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.read on the site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.read on the site : « 900 MAD / nuit »
RG-22 — The manager is the only administrator.to be confirmed
ADM-04 — Read contact messagesRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).read on the site : « Nom complet E-mail Sujet Message »
RG-22 — The manager is the only administrator.to be confirmed

Acceptance test book

Analysis texts are shown in the language the analysis was written in.

Each test case derives from the understanding above; each actual result comes with its evidence.

Ref.User storyExpected resultActual result and evidenceRecommendation
CN-1As a signed-in traveller, I want to book the Majorelle room for 2 nights for 2 adults with code RIAD10, so that I pay a deposit computed on the discounted total.
CLI-01 · RG-01 · RG-02 · RG-03 · RG-04 · RG-12
Availability results show the Majorelle room; the booking summary shows the tourist tax, the RIAD10 discount and a 30% deposit amount; the simulated payment page is reached and the amount is verified.

Pass

Server responses

  • POST /auth/v1/token → 200 (data)
  • POST /rest/v1/rpc/available_rooms → 200 (data)

Hygiene of related pages: #4, #17

Keep this case in the regression test suite.
CS-1As a visitor, I want to search availability for 4 adults and 3 children, so that I know whether the riad can host my group before booking.
VIS-02 · RG-01 · RG-04 · RG-05
The search returns results or an explicit message that no room matches 4 adults and 3 children; no room above its capacity is offered.

Pass

Server responses

  • POST /rest/v1/rpc/available_rooms → 200 (data)

Hygiene of related pages: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Keep this case in the regression test suite.
CS-2As a visitor, I want to read the FAQ answers about payment, tourist tax, cancellation and promo code, so that I can decide to book with confidence.
VIS-03 · RG-06
Each FAQ question opens or reveals an answer; if no answer text appears, the promise of a usable FAQ is broken.

Pass

Hygiene of related pages: #19

Keep this case in the regression test suite.
CS-3As a signed-in guest, I want to open My bookings and see my booking list, so that I can check my stay before arrival.
CLI-05 · RG-18 · RG-19
The signed-in guest sees 'Mes réservations', the 48 h cancellation notice and the empty-state message when no booking exists.

Pass

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: #4, #17

Keep this case in the regression test suite.
CS-4As a visitor, I want to send a contact message with my name, e-mail and question, so that the riad answers me before I book.
SUP-01 · RG-21
The message is accepted and a success confirmation is displayed; no validation error appears.

Not playable

not played: element not found: input[type=text] — to be confirmed

Hygiene of related pages: #7

Remove the blocker (not played: element not found: input[type=text] — to be confirmed), then replay.
CS-5As a signed-in guest, I want to try to publish a review before my stay, so that I understand the review rules of the riad.
CLI-07 · RG-06 · RG-20
The rule is enforced: a guest without a past stay cannot publish a review, and the page states the restriction.

Fail

text that should not appear is present: « Aucun avis pour le moment. »

Server responses

  • POST /auth/v1/token → 200 (data)
  • POST /rest/v1/rpc/has_past_stay → 200 (data)

Hygiene of related pages: #4, #17

Finding: #3

Severity S2: an important secondary or edge business case does not behave as promised. Replay the steps with the test account, fix, then run the acceptance test again.
CL-1As a visitor, I want to submit the search without an arrival date, so that I see the required-field message and correct my entry.
VIS-02 · RG-03
The search is refused or blocked while the required arrival date is empty; no availability result is produced.

Pass

Server responses

  • POST /rest/v1/rpc/available_rooms → 200 (data)

Hygiene of related pages: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Keep this case in the regression test suite.
CL-2As a visitor, I want to enter a departure before my arrival, so that the site tells me the dates are inconsistent instead of showing wrong results.
VIS-02 · RG-03 · RG-11
The site refuses the inverted dates or shows an explicit error; no room is offered for a negative-length stay.

Pass

Hygiene of related pages: no technical finding on these pages

Keep this case in the regression test suite.
CL-3As a visitor, I want to search with a past arrival date, so that the site prevents me from booking a stay in the past.
CLI-01 · RG-10
The past dates are rejected or produce no bookable room; no booking can be started in the past.

Fail

text that should not appear is present: « 900 MAD / nuit »

Hygiene of related pages: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Finding: #1

Severity S2: an important secondary or edge business case does not behave as promised. Replay the steps with the test account, fix, then run the acceptance test again.
CL-4As a visitor, I want to set zero adults, so that the site refuses an impossible occupancy instead of pricing an empty room.
VIS-02 · RG-04
Zero adults is refused by the field constraint or by an explicit message; no room is offered.

Pass

Server responses

  • POST /rest/v1/rpc/available_rooms → 200 (data)

Hygiene of related pages: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Keep this case in the regression test suite.
CL-5As a visitor, I want to enter more than four adults, so that the site caps the value at the maximum allowed.
VIS-02 · RG-04
The field caps the value at 4 or the search is refused; no result is produced for 5 adults.

Fail

text that should not appear is present: « 5 »

Hygiene of related pages: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Finding: #2

Severity S3: an edge case does not behave as expected. Replay the steps with the test account, fix, then run the acceptance test again.
CL-6As a visitor, I want to sign in with a wrong password, so that the site refuses access and protects the guest account.
ACC-02 · RG-07
Access is refused with an error message; the guest area and My bookings stay unreachable.

Pass

Hygiene of related pages: #4, #17

Keep this case in the regression test suite.
CL-7As a visitor, I want to sign in with a too-short password, so that the site enforces its minimum password length.
ACC-02 · RG-07
The short password is refused by the field constraint or by an error message; no session is opened.

Pass

Server responses

  • POST /auth/v1/token → 400 (data)

Hygiene of related pages: #4, #17

Keep this case in the regression test suite.
CL-8As a visitor, I want to submit the contact form with an invalid e-mail and accented text, so that the site validates the address and stores my message correctly.
SUP-01 · RG-21
The invalid e-mail is refused with a validation message; the message is not sent and no success confirmation appears.

Not playable

not played: element not found: input[type=text] — to be confirmed

Hygiene of related pages: #7

Remove the blocker (not played: element not found: input[type=text] — to be confirmed), then replay.
CL-9As a visitor, I want to submit the contact form empty, so that the site tells me which fields are required.
SUP-01 · RG-21
The send is blocked and the required fields (name, e-mail, message) are flagged; no success confirmation appears.

Pass

Hygiene of related pages: #7

Keep this case in the regression test suite.
CL-10As a signed-in guest, I want to cancel my booking around the 48-hour deadline, so that I know exactly when cancellation is still allowed.
CLI-06 · RG-19
The cancellation is accepted more than 48 h before arrival and refused less than 48 h before; the displayed rule matches the behaviour.

Inconclusive — to be confirmed

expected text missing: « Annulation possible jusqu'à 48 h avant l'arrivée. » (page: « Riad Dar Zitoun Accueil Disponibilités Avis FAQ Contact EN Connexion Connexion E-mail Mot de passe ConnexionPas encore de compte ? Créer un compte Riad Dar Zito »)

Hygiene of related pages: #4, #17

Have the business confirm the expected result, then replay.
CN-2As a signed-in traveller, I want to book the Majorelle room for 2 nights with code RIAD10, so that I pay a deposit computed on the discounted total.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted · the 30% deposit is computed on the discounted total, tax included
A booking confirmation screen appears with a booking number and the paid deposit of 684 MAD (accommodation 2,160 MAD after RIAD10 + 120 MAD tax = 2,280 MAD total).

Not playable

not played: element not found: input >> nth=0 — to be confirmed

Hygiene of related pages: no technical finding on these pages

Remove the blocker (not played: element not found: input >> nth=0 — to be confirmed), then replay.
CS-20As a signed-in traveller, I want to book the Suite Koutoubia without a promo code, so that I can secure the most expensive room at its full price.
Booking with deposit payment · the 30% deposit is computed on the total, tax included
Confirmation with a booking number and a deposit of 1,116 MAD (3,600 MAD accommodation + 120 MAD tax = 3,720 MAD total).

Pass

payment in test mode (provider: simulation)

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: no technical finding on these pages

Keep this case in the regression test suite.
CS-21As a signed-in traveller, I want to book the Palmeraie room with code RIAD10, so that I get the cheapest stay with the promised discount.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted
Confirmation with a booking number and a deposit of 441 MAD (1,350 MAD accommodation after RIAD10 + 120 MAD tax = 1,470 MAD total).

Not playable

not played: element not found: text=Payer l'acompte et confirmer · 441 MAD — to be confirmed

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: no technical finding on these pages

Remove the blocker (not played: element not found: text=Payer l'acompte et confirmer · 441 MAD — to be confirmed), then replay.
CS-22As a signed-in traveller, I want to find my new Atlas booking in My bookings, so that I can check the dates and the deposit I paid.
Booking follow-up · a booking made by the traveller must appear in My bookings
My bookings lists the Atlas booking with the 2026-11-10 to 2026-11-12 dates and the 576 MAD deposit.

Not playable

not played: element not found: input >> nth=0 — to be confirmed

Hygiene of related pages: no technical finding on these pages

Remove the blocker (not played: element not found: input >> nth=0 — to be confirmed), then replay.
CL-20As a signed-in traveller, I want the booking form to refuse an empty name and e-mail, so that my confirmation is not lost.
Booking with deposit payment · Nom complet and E-mail are required
The booking is refused: the required name and e-mail fields block the submission and no confirmation appears.

Pass

payment in test mode (provider: simulation)

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: no technical finding on these pages

Keep this case in the regression test suite.
CL-21As a signed-in traveller, I want an unknown promo code to be refused, so that I am not charged a wrong deposit.
Booking with deposit payment · only RIAD10 gives 10% off the accommodation
The unknown code is refused and the deposit stays at 576 MAD (1,800 MAD accommodation + 120 MAD tax = 1,920 MAD).

Pass

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: no technical finding on these pages

Keep this case in the regression test suite.
CL-22As a signed-in traveller, I want an invalid card number to be refused, so that I do not believe a deposit was paid.
Booking with deposit payment · the payment is simulated but the card number must be valid
The payment is refused and no booking confirmation appears.

Pass

payment in test mode (provider: simulation)

Server responses

  • POST /auth/v1/token → 200 (data)

Hygiene of related pages: no technical finding on these pages

Keep this case in the regression test suite.

Technical hygiene

Riad Dar Zitoun booking site — test report

The site is not ready to take bookings: the core money path was not validated end to end, and confirmed defects affect search, booking and review rules. Priority fixes should target invalid search validation, the review restriction, security headers and accessibility before re-testing the full funnel.

17 problems found, 2 to fix first.

Fix these first

  1. One cause → one fixMissing HTTP security headers

    Cause: Several protective HTTP headers are absent, which is the probable common cause behind the clickjacking exposure, missing CSP/Permissions-Policy and missing COOP.

    Single fix: Configure the hosting layer to send Content-Security-Policy with frame-ancestors 'none', Permissions-Policy, and Cross-Origin-Opener-Policy: same-origin-allow-popups.

    Findings : #4, #5, #6

  2. #4MajorLogin pages can be embedded in another site (clickjacking) (Chromium (Chrome's engine))

    Why first: The /auth page can be embedded in another site, enabling clickjacking and credential theft for guests and the manager. Effort : low

    Page: https://riad-connect-hub.lovable.app/auth

    Observed: Encadrables : /auth

    Technical detail

    Original title: Pages de connexion affichables dans un autre site (clickjacking)

    Expected: Ces pages refusent d'être affichées dans un cadre étranger

    Recommended fix: Envoyer Content-Security-Policy: frame-ancestors 'none' (et X-Frame-Options: DENY).

  3. #5MinorMissing security headers (desktop · Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Observed: Manquants : Content-Security-Policy, Permissions-Policy

    Technical detail

    Original title: En-têtes de sécurité absents sur riad-connect-hub.lovable.app

    Expected: En-têtes de sécurité présents

    Recommended fix: Les ajouter dans la configuration de l'hébergeur (fichier _headers Netlify, vercel.json...).

  4. #6NoteCross-Origin-Opener-Policy missing (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Observed: Cross-Origin-Opener-Policy: absent

    Technical detail

    Original title: Cross-Origin-Opener-Policy absente : une fenêtre ouverte par un autre site garde un lien vers la vôtre

    Expected: Cross-Origin-Opener-Policy: same-origin (ou same-origin-allow-popups si des fenêtres de paiement/connexion sont utilisées)

    Recommended fix: Ajouter Cross-Origin-Opener-Policy: same-origin-allow-popups, puis same-origin si aucun parcours n'en souffre.

  5. #7MajorAccessibility: form field without a label (2 occurrences on /contact) (Chromium (Chrome's engine))

    Why first: An unlabeled contact form field blocks screen-reader users and can reduce enquiries and accessibility compliance. Effort : low

    Page: https://riad-connect-hub.lovable.app/contact

    Observed: input[maxlength="100"] Form elements must have labels; input[maxlength="100"] Form elements must have labels

    Technical detail

    Original title: Accessibilité : champ-sans-libelle (label) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone

    Expected: Conforme WCAG 2.2 AA — WCAG 2.2 : 4.1.2 Nom, rôle et valeur (A), 1.3.1 Information et relations (A) · RGAA 4.1 : 11.1 Champ de formulaire avec étiquette

    Recommended fix: axe-core (moteur de référence) : corriger chaque élément cité.

  6. One cause → one fixNo consent before non-essential cookies

    Cause: Tracking cookies are dropped without a consent banner, so the site likely has no consent gate for non-essential cookies.

    Single fix: Add a compliant consent banner and block non-essential cookies and trackers until the visitor accepts them.

    Findings : #8, #9

  7. #8MinorNo cookie consent banner detected (Chromium (Chrome's engine))

    Why first: No cookie consent banner is shown before tracking cookies are set, creating legal/compliance risk and weakening visitor trust. Effort : medium

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Aucun bandeau de consentement aux cookies détecté sur riad-connect-hub.lovable.app

    Expected: Un bandeau qui demande l'accord (accepter / refuser / personnaliser)

    Observed: Ni outil de consentement connu, ni texte « cookies » avec un bouton d'acceptation, alors que des traceurs ou cookies de mesure sont présents.

    Recommended fix: Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Installez un outil de gestion du consentement et bloquez les traceurs tant que le visiteur n'a pas choisi.

  8. #9MinorAnalytics or advertising cookies set before consent (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Cookies de mesure ou de publicité déposés avant tout consentement sur riad-connect-hub.lovable.app

    Expected: Seuls des cookies techniques (session, panier, langue) avant l'accord

    Observed: Déposés sans accord : __cf_bm (supabase.co, tiers)

    Recommended fix: Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Déposez ces cookies seulement après l'accord, et proposez « Refuser » aussi simplement que « Accepter ».

The rest

0Critical
2Major
11Minor
4Note
  • One cause → one fixMissing legal information links

    Cause: The footer likely omits links to the privacy policy and legal notice.

    Single fix: Publish the privacy policy and legal notice pages and link them from the site footer on every page.

    Findings : #10, #11

  • #10MinorNo link to the privacy policy (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Pas de lien vers la politique de confidentialité

    Expected: Un lien vers la politique de confidentialité (RGPD / loi 09-08)

    Observed: Aucun lien ni texte « confidentialité / privacy / données personnelles » trouvé sur l'accueil.

    Recommended fix: Publier une politique de confidentialité et la lier depuis le pied de page.

  • #11MinorNo legal notice (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Pas de mentions légales

    Expected: Des mentions légales (éditeur, hébergeur, contact)

    Observed: Aucun lien « mentions légales / CGU / CGV / legal » trouvé sur l'accueil.

    Recommended fix: Ajouter une page de mentions légales liée depuis le pied de page.

  • One cause → one fixHeavy assets slow the page

    Cause: Large image and JavaScript files are the probable common cause of the excessive page weight.

    Single fix: Compress and convert images to WebP/AVIF, split JavaScript, remove unused libraries and defer non-critical scripts.

    Findings : #12, #13, #14

  • #12MinorOne image too heavy for its display size (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: 1 image(s) trop lourde(s) pour leur taille d'affichage

    Expected: Images < 300 Ko, dimensionnées pour l'affichage

    Observed: ttps://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg : 461 Ko, 1920 px affichés en 1440 px

    Recommended fix: SVG ou WebP pour le logo ; images responsives (srcset, AVIF/WebP) ; préchargement de l'image principale.

  • #13MinorHeavy JavaScript file: one file above 500 KB (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Fichiers JavaScript lourds : 1 fichier(s) au-dessus de 500 Ko

    Expected: Chaque fichier ≤ 500 Ko transférés

    Observed: https://riad-connect-hub.lovable.app/assets/index-BYEaChBb.js (text/javascript) : 574 Ko décompressés (167 Ko transférés)

    Recommended fix: Découper le JavaScript par page (code splitting), retirer les bibliothèques inutilisées (tree shaking), minifier et compresser (brotli) ; différer les scripts non essentiels (defer/async).

  • #14MinorHeavy images: one file above 300 KB (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Observed: https://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg (image/jpeg) : 462 Ko

    Technical detail

    Original title: Images lourdes : 1 fichier(s) au-dessus de 300 Ko

    Expected: Chaque fichier ≤ 300 Ko transférés

    Recommended fix: Convertir en WebP ou AVIF, redimensionner à la taille d'affichage (srcset), viser moins de 200 Ko par image ; charger en différé celles qui sont sous la ligne de flottaison.

  • One cause → one fixSlow mobile loading

    Cause: The mobile page likely suffers from the same heavy assets and render-blocking resources, causing high LCP and load times.

    Single fix: Optimise the largest contentful paint element, inline critical CSS and defer JavaScript so mobile pages load faster on slow networks.

    Findings : #15, #16

  • #15MinorSlow load (6,564 ms) on / — mobile only (phone · Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Expected: Chargement < 3000 ms

    Observed: / 6564 ms

    Technical detail

    Original title: Chargement lent (6564 ms) : / — téléphone uniquement

    Recommended fix: Mesurer avec Lighthouse ; compresser les images, decouper le JavaScript, mettre en cache.

  • #16MinorSlow on mobile slow network: LCP 4,464 ms, load 4,405 ms (unconfirmed) (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Lent sur téléphone en réseau lent : LCP 4464 ms, chargement 4405 ms (non confirmé)

    Expected: LCP ≤ 4000 ms et chargement ≤ 10000 ms dans ces conditions (profil mobile de Lighthouse)

    Observed: LCP 4464 ms, chargement 4405 ms (2 mesure(s), non confirmé)

    Recommended fix: Alléger d'abord l'élément principal affiché (image ou titre) : image compressée et préchargée (rel=preload), CSS critique en ligne, JavaScript différé ; servir les fichiers depuis un CDN proche des visiteurs.

  • #17MinorLogin pages open to search engines (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/auth

    Observed: Indexables : /auth ; robots.txt : User-agent: Googlebot Allow: / User-agent: Bingbot Allow: / User-agent: Twitterbot Allow: / User-agent: facebookexter

    Technical detail

    Original title: Pages de connexion ouvertes aux moteurs de recherche

    Expected: noindex et Disallow sur les espaces privés

    Recommended fix: Ajouter <meta name=robots content=noindex> et Disallow: /admin, /vendeur (ou équivalents).

  • #18NoteNo /.well-known/security.txt (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/.well-known/security.txt

    Observed: HTTP 404

    Technical detail

    Original title: Pas de /.well-known/security.txt

    Expected: Un fichier security.txt indiquant comment signaler une faille (RFC 9116)

    Recommended fix: Ajouter /.well-known/security.txt avec un contact de sécurité.

  • #19NoteAccessibility: heading order (2 occurrences on /faq) (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/faq

    Observed: .border-b:nth-child(1) > h3 Heading levels should only increase by one; .border-b:nth-child(1) > h3 Heading levels should only increase by one

    Technical detail

    Original title: Accessibilité : ordre-titres (heading-order) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone

    Expected: Conforme WCAG 2.2 AA — RGAA 4.1 : 9.1 Hiérarchie des titres

    Recommended fix: axe-core (moteur de référence) : corriger chaque élément cité.

  • #20NoteSEO: 1 issue — missing canonical on several pages (Chromium (Chrome's engine))

    Page: https://riad-connect-hub.lovable.app/

    Technical detail

    Original title: Référencement : 1 problème(s) sur riad-connect-hub.lovable.app

    Expected: Canonical propre à chaque langue, og:image, titres distincts

    Observed: sans canonical : /; /auth; /contact; /faq (+3)

    Recommended fix: Canonical auto-référent par langue, og:image/og:title partout, titre et canonical sur chaque page.

By theme

  • Security and data protection — Weak headers expose guest accounts, manager access and the booking site to phishing, clickjacking and cross-origin abuse.
    This section covers security headers and the handling of tracking technologies for the public and signed-in areas. #4, #5, #6, #18
  • Accessibility — Accessible forms and heading structure widen the audience and reduce the risk of excluding guests with disabilities.
    This section covers automated accessibility findings on the tested pages. #7, #19
  • Compliance and legal information — Missing legal pages and consent controls create compliance risk and reduce visitor confidence in the booking process.
    This section covers consent and legal information expected on a booking site. #8, #9, #10, #11
  • Performance and mobile experience — Slow pages on mobile lose direct bookings, especially for travellers searching on the move.
    This section covers loading speed and asset weight on the main pages, including mobile. #12, #13, #14, #15, #16
  • SEO and indexation — Indexation and canonical issues dilute visibility and can send search traffic to the wrong page.
    This section covers search-engine indexation and canonical signals. #17, #20

Next steps

  1. Fix the booking funnel validation and the review restriction, then re-run scenarios CN-1, CN-2, CS-20, CS-21, CS-22, CL-3, CL-5 and CS-5.
  2. Add the missing security headers and a consent banner that blocks non-essential cookies before consent.
  3. Complete the uncovered scenarios: CLI-02, CLI-03, CLI-04, ADM-01 and CL-10.
  4. Verify the 48-hour cancellation promise end to end.
  5. Re-run the full regression suite after the fixes and reassess the NO-GO decision.

The test covered smoke, browsers, security headers, accessibility (partial), read-only probes, SEO, branding, images, cookies, broken links, forms, GDPR/cookies, pages, signed-in area, role journeys (partial), client profile, created test accounts, visual and language checks, business logic (partial), application security, API/integration (partial), resilience, compliance, end-to-end by role and performance. Data security, static, unit and component tests were not tested.

Coverage limits

  • Accessibility : partial
    Technical detail

    axe-core sur chaque page (bureau et téléphone) + focus clavier ; critères WCAG 2.2 et RGAA 4.1 cités dans les constats ; compléments navigateur : 7 page(s) (7 pages lues sur 7 visitées (mode complet)), contraste mesuré sur 14 texte(s) (clair, et sombre sur 7 page(s)), 280 tabulation(s) (119 élément(s) vérifiés pour le focus visible, 0 fenêtre(s) modale(s) cachée(s) parcourue(s) sans clic, 0 piège(s)), noms accessibles vérifiés sur 7 page(s), 0 PDF lié(s) non audité(s)

  • Visual regression : not tested
    Technical detail

    Aucune reference approuvee : approuve un passage comme reference.

  • Journeys by role : partial
    Technical detail

    2 pages, 33 actions relevées, 0 action jouée (lecture seule) — rôle « [email] »

  • Business logic : partial
    Technical detail

    logique métier décrite par le client jouée par les scénarios métier (voir la ligne « Scénarios métier ») ; aucune idée « Depuis ton idée » à rapprocher

  • API / integration : partial
    Technical detail

    pas de spécification OpenAPI trouvée (/openapi.json, /swagger.json, /api-docs, /api/openapi.json…) ; sondes GET : /api → 406, /api/health → 406, /graphql → 406 — importe le contrat de l'API pour des cas par opération ; spec reconstituée depuis le navigateur (7 page(s) — 7 pages lues sur 7 visitées (mode complet), 9 appel(s) observé(s), aucune requête ajoutée) : 1 point(s) d'entrée — POST /__l5e/trackevents [?] ; 0 constat(s)

  • Data security : not tested
    Technical detail

    aucune base détectée (Supabase : clé anon dans la page ; Firebase : apiKey + databaseURL) — le contrôle RLS demande un accès à la base ou une clé publique visible

  • Business scenarios : partial
    Technical detail

    16 cas conçus (1 nominal, 5 secondaires, 10 limites) ; joués : 16 (mode complet : CN-1, CS-1, CS-2, CS-3, CS-4, CS-5, CL-1, CL-2, CL-3, CL-4, CL-5, CL-6, CL-7, CL-8, CL-9, CL-10) ; 10 réussis / 3 échecs / 0 bloqués / 2 non jouables ; 1 attendu(s) deviné(s) par le BA non vérifié(s) : à confirmer par le client (non déclarés) — CL-10 ; CS-4 non joué : élément introuvable : input[type=text] — à confirmer ; CL-8 non joué : élément introuvable : input[type=text] — à confirmer ; écriture autorisée, 41 soumission(s) ; exploration en jouant : 4 écran(s) découvert(s) (htt

  • Static analysis : not tested
    Technical detail

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • Unit tests : not tested
    Technical detail

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • Components : not tested
    Technical detail

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • Another area : partial
    Technical detail

    Niveaux

    6/13 exécutés, 3 partiels, 4 non testés (sur 13 niveaux du plan) ; demandés : 6/10 faits

  • Another area : partial
    Technical detail

    À vérifier (sans constat)

    1 point(s) non mesuré(s), sans constat : Accessibilité : contraste à vérifier à la main — fond non uni (image, dégradé, élément superposé ou transparence) : 17 sélecteur(s) sur 7 page(s) — .tracking-\[0\.25em\] : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; h1 : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; .max-w-xl : Element's background color could not be determined due to a bac

Test timings
  • 6912 msplan du site (0 adresse(s) à visiter en plus)
  • 11721 mscréation des comptes de recette (1/1 créé(s))
  • 1615 msnavigation bureau p1 (chargement 583, réseau calme 1013, relevés 19)
  • 6170 msa11y bureau p1
  • 444 msfocus clavier bureau p1
  • 3111 mscapture bureau p1
  • 1277 msnavigation bureau p2 (chargement 639, réseau calme 622, relevés 16)
  • 1003 msa11y bureau p2
  • 175 mscapture bureau p2
  • 1371 msnavigation bureau p3 (chargement 588, réseau calme 767, relevés 16)
  • 694 msa11y bureau p3
  • 136 mscapture bureau p3
  • 1241 msnavigation bureau p4 (chargement 487, réseau calme 728, relevés 26)
  • 799 msa11y bureau p4
  • 105 mscapture bureau p4
  • 1259 msnavigation bureau p5 (chargement 554, réseau calme 692, relevés 13)
  • 1022 msa11y bureau p5
  • 164 mscapture bureau p5
  • 1189 msnavigation bureau p6 (chargement 514, réseau calme 664, relevés 11)
  • 662 msa11y bureau p6
  • 103 mscapture bureau p6
  • 3612 msconnexion avec le compte de test (client) (réussie)
  • 1796 msnavigation bureau p1 (chargement 507, réseau calme 1271, relevés 18)
  • 533 msa11y bureau p1
  • 97 mscapture bureau p1
  • 1535 msnavigation bureau p2 (chargement 436, réseau calme 1077, relevés 22)
  • 916 msa11y bureau p2
  • 1863 mscapture bureau p2
  • 562 mssondes (robots.txt, pages inexistantes, paramètres, limites)
  • 91 msliens (0 lien(s) vérifié(s) (plafond 50), 0 fil(s) réellement utilisé(s) sur 4, délai 8000 ms par lien, périmètre 3 ms, requêtes 0 ms, lien le plus lent 0 ms, 0 non vérifié(s) (délai ou réseau), 0 erreur(s) HTTP)
  • 8691 msrgpd (visite en navigateur neuf + capture)
  • 7305 msnavigation telephone p1 (chargement 6572, réseau calme 715, relevés 18)
  • 5949 msa11y telephone p1
  • 1065 mscapture telephone p1
  • 1187 msnavigation telephone p2 (chargement 506, réseau calme 667, relevés 14)
  • 615 msa11y telephone p2
  • 87 mscapture telephone p2
  • 1238 msnavigation telephone p3 (chargement 497, réseau calme 730, relevés 11)
  • 554 msa11y telephone p3
  • 49 mscapture telephone p3

Reasoned GO / NO-GO decision

NO-GOThe dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conclusive). With the booking path unproven and a reproduced defect on a client-facing promise, the site cannot be signed off as ready to take bookings.

Reasons (evidence)

  • 14 cases pass out of 23 played; 3 fail; 1 inconclusive; 5 blocked.
  • Failing cases: CS-5, CL-3, CL-5.
  • Technical hygiene: 0 critical, 2 major, 15 minor finding(s).

Expert opinion

Decision: NO-GO

Arguments

  1. The core revenue path (search -> room -> summary with tax and RIAD10 -> 30% deposit -> booking number) was never validated end to end, so the riad's only online income flow is unproven. (strong)
    evidence : processus:CLI-02, processus:CLI-03, processus:CLI-04, CN-2, CS-21, CS-22, I3, I4
  2. The nominal booking scenario CN-1 is reported as successful, but the same money path replayed as CN-2, CS-21 and CS-22 could not be played (missing elements), so the success of CN-1 is not corroborated on the deposit and confirmation steps. (strong)
    evidence : CN-1, CN-2, CS-21, CS-22, I3, I4, I5
  3. A defect on the review restriction promised to guests ('only guests who have stayed may publish a review') is reproduced twice, which directly undermines the credibility of the riad's ratings. (strong)
    evidence : CS-5, I1, processus:CLI-07, https://riad-connect-hub.lovable.app/rev
  4. A past arrival date is not blocked before any deposit can be taken (CL-3 failed, CLI-01 in defect), even though the second attempt in I2 was non-conclusive, leaving a booking that is unpayable and unserviceable. (medium)
    evidence : CL-3, I2, processus:CLI-01
  5. The written promise 'cancellation possible up to 48 hours before arrival' could not be verified: CL-10 is 'to be confirmed' and its replay I6 is non-conclusive, so a client-facing commitment is neither confirmed nor refuted. (medium)
    evidence : CL-10, I6
  6. The manager side of the business (booking calendar, blocked dates, rooms and prices, contact messages) is entirely untested, so the riad cannot be shown to be able to operate the bookings the site would generate. (medium)
    evidence : processus:ADM-01, processus:ADM-02, processus:ADM-03, processus:ADM-04
  7. The room and nightly price display promised on the home page is not covered: VIS-01 has no case and the /rooms page returns HTTP 404. (medium)
    evidence : processus:VIS-01, I8, https://riad-connect-hub.lovable.app/roo, https://riad-connect-hub.lovable.app/
  8. Some checks did pass: sign-in with wrong password and short password (CL-6, CL-7), empty and incoherent search dates (CL-1, CL-2), zero adults (CL-4), empty contact form (CL-9), unknown promo code (CL-21) and invalid card number (CL-22) behaved as expected. (weak)
    evidence : CL-6, CL-7, CL-1, CL-2, CL-4, CL-9, CL-21, CL-22

Residual risks

  • A booking could be created or paid without the deposit, tax or RIAD10 discount being correctly computed, since CLI-02/CLI-03/CLI-04 were never exercised (I3, I4, I5 non-conclusive).
  • A guest could book a stay in the past or with an uncapped guest count (CL-3, CL-5 failed) and reach a payment step that should have been blocked.
  • The 48-hour cancellation promise may be applied wrongly (refusing a legitimate cancellation or refunding a non-refundable stay) since CL-10 and I6 are non-conclusive.
  • Reviews may be publishable without a past stay (C01 reproduced in I1), damaging the riad's reputation and its direct-booking argument.
  • The manager has no verified way to follow bookings, block dates, manage prices or read messages (ADM-01 to ADM-04 uncovered), so operational failures would surface only after real bookings arrive.
  • The contact form could not be exercised (CS-4, CL-8 non-playable), so warm leads may be lost or stored corrupted without the manager being able to answer.

Scope of the opinion

  • tested : Availability search by dates and guests (VIS-02, CS-1, CL-1, CL-2, CL-4), Sign-in (ACC-02, CL-6, CL-7), FAQ and reviews reading (VIS-03, CS-2), My bookings empty state (CLI-05, CS-3), Review publication restriction (CLI-07, CS-5, C01, I1), Room choice and dates (CLI-01, CN-1, CL-3), Booking summary, deposit and booking number partially (CN-1, CS-20, CL-20, CL-21, CL-22), Contact message (SUP-01, CL-9), Accessibility, visual and languages, application security, resilience, compliance, performance, end-to-end by role (couverture)
  • not tested : VIS-01 Browse rooms and nightly prices (non_couvert; /rooms returns HTTP 404, I8), ACC-01 Create an account (non_couvert), CLI-02 Review booking summary with tax and promo (non_couvert), CLI-03 Pay the 30% deposit online (non_couvert), CLI-04 Receive booking number (non_couvert), CLI-06 Cancel a booking (non_joue, CL-10 non-conclusive), ADM-01 Follow the booking calendar (non_couvert), ADM-02 Block dates (non_couvert), ADM-03 Manage rooms and prices (non_couvert), ADM-04 Read contact messages (non_couvert), Data security (couverture: non teste), API / integration (couverture: partiel, no OpenAPI specification found), Contact form scenarios CS-4 and CL-8 (non_jouable), Booking scenarios CN-2, CS-21, CS-22 (non_jouable, I3, I4, I5 non-conclusive)

Confidence: medium

Avalyz proves what it saw, it does not guarantee the rest: what was not tested is not covered. Without a test account, signed-in pages are not explored; with a test account, signing in is the only form submitted.

The full account report (journeys, evidence, ISO 29119 format) is for accounts only.

AvalyzTester une autre app

7/7 pages

Exemple de rapport

Application fictive créée pour la démonstration : aucune donnée réelle. Ton rapport suivra la même structure.

Tester mon app

Ce qui casse dans ton app

Riad Dar Zitoun

riad-connect-hub.lovable.app

Adresse testée : https://riad-connect-hub.lovable.app/ · 09/10/2026 · passage complet, mode écriture demandé (données de test seulement, jamais de paiement réel ni de suppression) · 7 pages visitées · 10 niveaux de test · verdict calculé comme éditeur · app en construction

Rapport de synthèse

Décision

NO-GO
Détail technique

The dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conc

Le test de riad-connect-hub.lovable.app relève 20 constats, dont 4 majeurs ou critiques (S1, S2), qui se ramènent à 12 correctifs. À traiter d'abord : Parcours métier en échec, puis Parcours métier en échec, puis Pages de connexion affichables dans un autre site (clickjacking).

Chiffres clés

7pages testées
23cas métier joués14 réussis · 3 en échec · 0 bloqués
20constats0 Critique · 4 Majeur · 12 Mineur · 4 Remarque

À corriger d'abord

  1. #1MajeurScénario métier CL-3 en échec : Search with a past arrival date
    Le client ne peut pas aller au bout d'un parcours qui rapporte : réservations perdues tant que ce n'est pas corrigé.
  2. #2MineurScénario métier CL-5 en échec : Search with adults above the maximum of 4
  3. #3MajeurParcours métier en échec — /reviews
    Le client ne peut pas aller au bout d'un parcours qui rapporte : réservations perdues tant que ce n'est pas corrigé.
  4. #4MajeurPages de connexion affichables dans un autre site (clickjacking)
    Un site tiers peut piéger les clics sur la page de connexion : comptes clients exposés et confiance perdue.
  5. #5MineurEn-têtes de sécurité absents sur riad-connect-hub.lovable.app

Prochaines étapes

  1. Corriger les 5 points « à corriger d'abord », dans l'ordre.
  2. Appliquer les 6 correctifs groupés : chacun règle plusieurs constats à la fois.
  3. Traiter ensuite les constats mineurs restants, section par section.
  4. Relancer un test Avalyz pour vérifier les corrections.

Rapport détaillé

Notre compréhension du métier (à valider)

Cette compréhension a été construite à partir de ce que l'application montre ; elle est à valider par les équipes métier avant de fonder une décision.

Concept

Riad Dar Zitoun is a five-room guesthouse in the Medina of Marrakech selling direct room bookings online, with a 30% deposit paid through a simulated payment. It targets travellers (couples, small families, groups) who want a riad stay near the Koutoubia, promising transparent nightly prices, instant booking and free cancellation up to 48 h before arrival.

Clients visés : Travellers seeking a guesthouse stay in the Medina of Marrakech (couples, small families, groups of 2 to 4 guests) and the riad manager who administers bookings, rooms, prices and messages.

Chaîne de valeur

  1. AttractVIS-01, VIS-02, VIS-03
  2. ConvertCLI-01, CLI-02, CLI-03
  3. DeliverCLI-04, CLI-05
  4. Collect cashCLI-03, CLI-06
  5. RetainCLI-07, SUP-01
  6. AdministerADM-01, ADM-02, ADM-03, ADM-04

Business model

Segments de clientsTravellers to Marrakech: couples, small families and groups of 2 to 4 guests; direct bookers avoiding OTAs.
Proposition de valeurA peaceful five-room riad by the Koutoubia, clear nightly prices in MAD, direct booking with a 30% deposit and free cancellation up to 48 h.
CanauxOwn website (French with EN switch), room pages, availability search, contact form, FAQ, guest reviews.
Sources de revenusDirect room bookings per night in MAD, 30% deposit paid online (simulated), tourist tax 30 MAD per adult per night; promo RIAD10 -10% on accommodation.
Partenaires clésNone visible on the site; the client description mentions no external partner (payment is simulated).

Organisation

Organigramme fonctionnel : espaces de l'application et profils d'utilisateurs. ★ = profil retenu pour les tests.

  • riad-connect-hub.lovable.app
    • Public website (visitor)
      • Visitor (not signed in) VIS ★
    • Guest area (signed-in traveller)
      • Guest / traveller (signed-in customer) CLI ★
    • Manager back-office (annoncé, non vu)
      • Manager (only administrator) ADM

Tableau des fonctions

Fonction (profil)MissionPrincipales responsabilitésRetenu pour les tests
Visitor (not signed in) VISDiscover the riad and its rooms and start an availability search without an account.
  • Consult room list and nightly prices
  • Run availability searches
  • Contact the riad
★ oui
Guest / traveller (signed-in customer) CLIBook a stay, pay the deposit and manage the booking until departure.
  • Complete a booking with correct dates and guests
  • Pay the 30% deposit online
  • Cancel at least 48 h before arrival if needed
★ oui
Manager (only administrator) ADMOperate the riad: keep the calendar, rooms, prices and guest messages under control.
  • Follow incoming bookings
  • Block unavailable dates
  • Maintain rooms, prices and messages
non

Domaines

Métier

  • Discovery and content VIS-01, VIS-03
  • Booking and availability VIS-02, CLI-01, CLI-02
  • Payment and deposit CLI-03, CLI-04
  • Stay and after-sales CLI-05, CLI-06

Support

  • Account and authentication ACC-01, ACC-02
  • Riad administration ADM-01, ADM-02, ADM-03, ADM-04
  • Customer support and contact SUP-01
  • Communication and reviews CLI-07

Cartographie des macro-processus et processus

Macro-processusProcessusProfilIssuesCouverture
Attract travellers
Métier · Discovery and content
VIS-01 — Browse rooms and nightly pricesVIS✓ Five rooms and prices displayed, ✗ Page unavailablenon testé
VIS-03 — Read FAQ and reviewsVIS✓ FAQ questions and reviews page displayed, ✗ No answer shown under FAQ questiontesté : conforme (CS-2)
Attract travellers
Métier · Booking and availability
VIS-02 — Search availability by dates and guestsVIS✓ Availability results shown, ✗ Missing arrival or departure date, ✗ Departure before arrival, ✗ Guests exceed room capacitytesté : défaut (CS-1, CL-1, CL-2, CL-4, CL-5)
Sell a stay
Métier · Booking and availability
CLI-01 — Choose a room and datesCLI✓ Room available for the dates, ✗ Room already booked on overlapping dates, ✗ Guests exceed room capacity, ✗ Dates in the past, ✗ Stay shorter than 1 nighttesté : défaut (CN-1, CL-3)
CLI-02 — Review booking summary with tax and promoCLI✓ Discounted total and tax shown, ✗ Invalid promo code, ✗ Promo applied to tourist taxnon testé
Sell a stay
Métier · Payment and deposit
CLI-03 — Pay the 30% deposit onlineCLI✓ Deposit accepted, booking number issued, ✗ Payment refused, ✗ Payment abandoned by guest, ✗ Room taken before paymentnon testé
CLI-04 — Receive booking numberCLI✓ Booking number displayed, ✗ Confirmation not receivednon testé
Manage the stay
Métier · Stay and after-sales
CLI-05 — Consult My bookingsCLI✓ Bookings listed, ✗ No booking yettesté : conforme (CS-3)
CLI-06 — Cancel a bookingCLI✓ Booking cancelled, ✗ Less than 48 h before arrival, ✗ Cancellation refusednon joué (CL-10)
Manage account
Support · Account and authentication
ACC-01 — Create an accountVIS✓ Account created, confirmation e-mail sent, ✗ Password shorter than 6 characters, ✗ E-mail already usednon testé
ACC-02 — Sign inVIS✓ Signed in, My bookings visible, ✗ Wrong credentials, ✗ Password shorter than 6 characterstesté : conforme (CL-6, CL-7)
Operate the riad
Support · Riad administration
ADM-01 — Follow the booking calendarADM✓ New booking visible on calendar, ✗ Booking not found, ✗ Access denied to non-managernon testé
ADM-02 — Block datesADM✓ Dates blocked, ✗ Dates overlap an existing bookingnon testé
ADM-03 — Manage rooms and pricesADM✓ Room or price updated, ✗ Invalid price or capacitynon testé
ADM-04 — Read contact messagesADM✓ Message read, ✗ No message receivednon testé
Support guests
Support · Customer support and contact
SUP-01 — Send a contact messageVIS✓ Message sent, ✗ Missing name, e-mail or message, ✗ Invalid e-mailtesté : conforme (CS-4, CL-8, CL-9)
Build trust
Support · Communication and reviews
CLI-07 — Publish a guest reviewCLI✓ Review published, ✗ Guest has not stayed at the riad, ✗ Not signed intesté : défaut (CS-5)

Règles de gestion clés par processus

ProcessusRègle de gestionSource
VIS-01 — Browse rooms and nightly pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.lue sur le site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.lue sur le site : « 900 MAD / nuit »
VIS-02 — Search availability by dates and guestsRG-03 — The search form requires an arrival date and a departure date.lue sur le site : « Arrivée Départ »
RG-04 — Adults are bounded between 1 and 4 and children between 0 and 3.lue sur le site : « Adultes Enfants »
RG-05 — The riad has five rooms around a patio of orange trees.à confirmer
VIS-03 — Read FAQ and reviewsRG-06 — Only guests who have stayed at the riad may publish a review.lue sur le site : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
ACC-01 — Create an accountRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.lue sur le site : « E-mail Mot de passe »
RG-08 — Sign-up is with e-mail and password, with a confirmation e-mail.à confirmer
ACC-02 — Sign inRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.lue sur le site : « E-mail Mot de passe »
CLI-01 — Choose a room and datesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.lue sur le site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.lue sur le site : « 900 MAD / nuit »
RG-09 — A room can never be booked twice on overlapping dates.à confirmer
RG-10 — No booking in the past.à confirmer
RG-11 — Minimum stay of 1 night.à confirmer
CLI-02 — Review booking summary with tax and promoRG-12 — Tourist tax is 30 MAD per adult per night.à confirmer
RG-13 — Promo code RIAD10 gives 10% off the accommodation only; the tourist tax is never discounted.à confirmer
RG-14 — The 30% deposit is computed on the discounted total, tax included.à confirmer
CLI-03 — Pay the 30% deposit onlineRG-15 — The deposit is 30% of the total and is paid online.à confirmer
RG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.à confirmer
RG-17 — The environment is a TEST environment, not production.à confirmer
CLI-04 — Receive booking numberRG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.à confirmer
CLI-05 — Consult My bookingsRG-18 — A signed-in guest sees 'Mes réservations' with 'Vous n'avez pas encore de réservation.' when empty.lue sur le site : « Vous n'avez pas encore de réservation. »
CLI-06 — Cancel a bookingRG-19 — Cancellation is allowed up to 48 hours before arrival.lue sur le site : « Annulation possible jusqu'à 48 h avant l'arrivée. »
CLI-07 — Publish a guest reviewRG-06 — Only guests who have stayed at the riad may publish a review.lue sur le site : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
RG-20 — Reviews page shows 'Aucun avis pour le moment.' when no review exists.lue sur le site : « Aucun avis pour le moment. »
SUP-01 — Send a contact messageRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).lue sur le site : « Nom complet E-mail Sujet Message »
ADM-01 — Follow the booking calendarRG-22 — The manager is the only administrator.à confirmer
ADM-02 — Block datesRG-09 — A room can never be booked twice on overlapping dates.à confirmer
RG-22 — The manager is the only administrator.à confirmer
ADM-03 — Manage rooms and pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.lue sur le site : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.lue sur le site : « 900 MAD / nuit »
RG-22 — The manager is the only administrator.à confirmer
ADM-04 — Read contact messagesRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).lue sur le site : « Nom complet E-mail Sujet Message »
RG-22 — The manager is the only administrator.à confirmer

Cahier de recette

Chaque jeu de test est tiré de la compréhension ci-dessus ; le résultat obtenu est accompagné de ses preuves.

Réf.User storyRésultat attenduRésultat obtenu et preuvesRecommandation
CN-1As a signed-in traveller, I want to book the Majorelle room for 2 nights for 2 adults with code RIAD10, so that I pay a deposit computed on the discounted total.
CLI-01 · RG-01 · RG-02 · RG-03 · RG-04 · RG-12
Availability results show the Majorelle room; the booking summary shows the tourist tax, the RIAD10 discount and a 30% deposit amount; the simulated payment page is reached and the amount is verified.

Conforme

Réponses du serveur

  • POST /auth/v1/token → 200 (données)
  • POST /rest/v1/rpc/available_rooms → 200 (données)

Hygiène des pages liées : #4, #17

Garder ce cas dans la recette de non-régression.
CS-1As a visitor, I want to search availability for 4 adults and 3 children, so that I know whether the riad can host my group before booking.
VIS-02 · RG-01 · RG-04 · RG-05
The search returns results or an explicit message that no room matches 4 adults and 3 children; no room above its capacity is offered.

Conforme

Réponses du serveur

  • POST /rest/v1/rpc/available_rooms → 200 (données)

Hygiène des pages liées : #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Garder ce cas dans la recette de non-régression.
CS-2As a visitor, I want to read the FAQ answers about payment, tourist tax, cancellation and promo code, so that I can decide to book with confidence.
VIS-03 · RG-06
Each FAQ question opens or reveals an answer; if no answer text appears, the promise of a usable FAQ is broken.

Conforme

Hygiène des pages liées : #19

Garder ce cas dans la recette de non-régression.
CS-3As a signed-in guest, I want to open My bookings and see my booking list, so that I can check my stay before arrival.
CLI-05 · RG-18 · RG-19
The signed-in guest sees 'Mes réservations', the 48 h cancellation notice and the empty-state message when no booking exists.

Conforme

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : #4, #17

Garder ce cas dans la recette de non-régression.
CS-4As a visitor, I want to send a contact message with my name, e-mail and question, so that the riad answers me before I book.
SUP-01 · RG-21
The message is accepted and a success confirmation is displayed; no validation error appears.

Non jouable

non joué : élément introuvable : input[type=text] — à confirmer

Hygiène des pages liées : #7

Lever le blocage (non joué : élément introuvable : input[type=text] — à confirmer), puis rejouer.
CS-5As a signed-in guest, I want to try to publish a review before my stay, so that I understand the review rules of the riad.
CLI-07 · RG-06 · RG-20
The rule is enforced: a guest without a past stay cannot publish a review, and the page states the restriction.

Non conforme

texte à ne pas trouver présent : « Aucun avis pour le moment. »

Réponses du serveur

  • POST /auth/v1/token → 200 (données)
  • POST /rest/v1/rpc/has_past_stay → 200 (données)

Hygiène des pages liées : #4, #17

Constat : #3

Gravité S2 : un cas secondaire ou limite important du métier ne se comporte pas comme promis. Rejouer les étapes avec le compte de test, corriger, relancer la recette.
CL-1As a visitor, I want to submit the search without an arrival date, so that I see the required-field message and correct my entry.
VIS-02 · RG-03
The search is refused or blocked while the required arrival date is empty; no availability result is produced.

Conforme

Réponses du serveur

  • POST /rest/v1/rpc/available_rooms → 200 (données)

Hygiène des pages liées : #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Garder ce cas dans la recette de non-régression.
CL-2As a visitor, I want to enter a departure before my arrival, so that the site tells me the dates are inconsistent instead of showing wrong results.
VIS-02 · RG-03 · RG-11
The site refuses the inverted dates or shows an explicit error; no room is offered for a negative-length stay.

Conforme

Hygiène des pages liées : aucun constat technique sur ces pages

Garder ce cas dans la recette de non-régression.
CL-3As a visitor, I want to search with a past arrival date, so that the site prevents me from booking a stay in the past.
CLI-01 · RG-10
The past dates are rejected or produce no bookable room; no booking can be started in the past.

Non conforme

texte à ne pas trouver présent : « 900 MAD / nuit »

Hygiène des pages liées : #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Constat : #1

Gravité S2 : un cas secondaire ou limite important du métier ne se comporte pas comme promis. Rejouer les étapes avec le compte de test, corriger, relancer la recette.
CL-4As a visitor, I want to set zero adults, so that the site refuses an impossible occupancy instead of pricing an empty room.
VIS-02 · RG-04
Zero adults is refused by the field constraint or by an explicit message; no room is offered.

Conforme

Réponses du serveur

  • POST /rest/v1/rpc/available_rooms → 200 (données)

Hygiène des pages liées : #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Garder ce cas dans la recette de non-régression.
CL-5As a visitor, I want to enter more than four adults, so that the site caps the value at the maximum allowed.
VIS-02 · RG-04
The field caps the value at 4 or the search is refused; no result is produced for 5 adults.

Non conforme

texte à ne pas trouver présent : « 5 »

Hygiène des pages liées : #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

Constat : #2

Gravité S3 : un cas limite ne se comporte pas comme attendu. Rejouer les étapes avec le compte de test, corriger, relancer la recette.
CL-6As a visitor, I want to sign in with a wrong password, so that the site refuses access and protects the guest account.
ACC-02 · RG-07
Access is refused with an error message; the guest area and My bookings stay unreachable.

Conforme

Hygiène des pages liées : #4, #17

Garder ce cas dans la recette de non-régression.
CL-7As a visitor, I want to sign in with a too-short password, so that the site enforces its minimum password length.
ACC-02 · RG-07
The short password is refused by the field constraint or by an error message; no session is opened.

Conforme

Réponses du serveur

  • POST /auth/v1/token → 400 (données)

Hygiène des pages liées : #4, #17

Garder ce cas dans la recette de non-régression.
CL-8As a visitor, I want to submit the contact form with an invalid e-mail and accented text, so that the site validates the address and stores my message correctly.
SUP-01 · RG-21
The invalid e-mail is refused with a validation message; the message is not sent and no success confirmation appears.

Non jouable

non joué : élément introuvable : input[type=text] — à confirmer

Hygiène des pages liées : #7

Lever le blocage (non joué : élément introuvable : input[type=text] — à confirmer), puis rejouer.
CL-9As a visitor, I want to submit the contact form empty, so that the site tells me which fields are required.
SUP-01 · RG-21
The send is blocked and the required fields (name, e-mail, message) are flagged; no success confirmation appears.

Conforme

Hygiène des pages liées : #7

Garder ce cas dans la recette de non-régression.
CL-10As a signed-in guest, I want to cancel my booking around the 48-hour deadline, so that I know exactly when cancellation is still allowed.
CLI-06 · RG-19
The cancellation is accepted more than 48 h before arrival and refused less than 48 h before; the displayed rule matches the behaviour.

Non concluant — à confirmer

texte attendu absent : « Annulation possible jusqu'à 48 h avant l'arrivée. » (page : « Riad Dar Zitoun Accueil Disponibilités Avis FAQ Contact EN Connexion Connexion E-mail Mot de passe ConnexionPas encore de compte ? Créer un compte Riad Dar Zito »)

Hygiène des pages liées : #4, #17

Faire confirmer l'attendu par le métier, puis rejouer.
CN-2As a signed-in traveller, I want to book the Majorelle room for 2 nights with code RIAD10, so that I pay a deposit computed on the discounted total.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted · the 30% deposit is computed on the discounted total, tax included
A booking confirmation screen appears with a booking number and the paid deposit of 684 MAD (accommodation 2,160 MAD after RIAD10 + 120 MAD tax = 2,280 MAD total).

Non jouable

non joué : élément introuvable : input >> nth=0 — à confirmer

Hygiène des pages liées : aucun constat technique sur ces pages

Lever le blocage (non joué : élément introuvable : input >> nth=0 — à confirmer), puis rejouer.
CS-20As a signed-in traveller, I want to book the Suite Koutoubia without a promo code, so that I can secure the most expensive room at its full price.
Booking with deposit payment · the 30% deposit is computed on the total, tax included
Confirmation with a booking number and a deposit of 1,116 MAD (3,600 MAD accommodation + 120 MAD tax = 3,720 MAD total).

Conforme

paiement en mode test (prestataire : simulation)

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : aucun constat technique sur ces pages

Garder ce cas dans la recette de non-régression.
CS-21As a signed-in traveller, I want to book the Palmeraie room with code RIAD10, so that I get the cheapest stay with the promised discount.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted
Confirmation with a booking number and a deposit of 441 MAD (1,350 MAD accommodation after RIAD10 + 120 MAD tax = 1,470 MAD total).

Non jouable

non joué : élément introuvable : text=Payer l'acompte et confirmer · 441 MAD — à confirmer

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : aucun constat technique sur ces pages

Lever le blocage (non joué : élément introuvable : text=Payer l'acompte et confirmer · 441 MAD — à confirmer), puis rejouer.
CS-22As a signed-in traveller, I want to find my new Atlas booking in My bookings, so that I can check the dates and the deposit I paid.
Booking follow-up · a booking made by the traveller must appear in My bookings
My bookings lists the Atlas booking with the 2026-11-10 to 2026-11-12 dates and the 576 MAD deposit.

Non jouable

non joué : élément introuvable : input >> nth=0 — à confirmer

Hygiène des pages liées : aucun constat technique sur ces pages

Lever le blocage (non joué : élément introuvable : input >> nth=0 — à confirmer), puis rejouer.
CL-20As a signed-in traveller, I want the booking form to refuse an empty name and e-mail, so that my confirmation is not lost.
Booking with deposit payment · Nom complet and E-mail are required
The booking is refused: the required name and e-mail fields block the submission and no confirmation appears.

Conforme

paiement en mode test (prestataire : simulation)

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : aucun constat technique sur ces pages

Garder ce cas dans la recette de non-régression.
CL-21As a signed-in traveller, I want an unknown promo code to be refused, so that I am not charged a wrong deposit.
Booking with deposit payment · only RIAD10 gives 10% off the accommodation
The unknown code is refused and the deposit stays at 576 MAD (1,800 MAD accommodation + 120 MAD tax = 1,920 MAD).

Conforme

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : aucun constat technique sur ces pages

Garder ce cas dans la recette de non-régression.
CL-22As a signed-in traveller, I want an invalid card number to be refused, so that I do not believe a deposit was paid.
Booking with deposit payment · the payment is simulated but the card number must be valid
The payment is refused and no booking confirmation appears.

Conforme

paiement en mode test (prestataire : simulation)

Réponses du serveur

  • POST /auth/v1/token → 200 (données)

Hygiène des pages liées : aucun constat technique sur ces pages

Garder ce cas dans la recette de non-régression.

Hygiène technique

Recette de riad-connect-hub.lovable.app : 20 constats, 12 correctifs à faire

Le test de riad-connect-hub.lovable.app relève 20 constats, dont 4 majeurs ou critiques (S1, S2), qui se ramènent à 12 correctifs. À traiter d'abord : Parcours métier en échec, puis Parcours métier en échec, puis Pages de connexion affichables dans un autre site (clickjacking).

17 problèmes trouvés, dont 2 à corriger d'abord.

À corriger en premier

  1. Une cause → un correctifPages de connexion affichables dans un autre site (clickjacking) : 3 constats, un seul correctif

    Cause : Même défaut « Pages de connexion affichables dans un autre site (clickjacking) » répété : probablement un composant ou un gabarit commun.

    Correctif unique : Envoyer l'en-tête Content-Security-Policy: frame-ancestors 'none' (et X-Frame-Options: DENY).

    Constats : #4, #5, #6

  2. #4MajeurPages de connexion affichables dans un autre site (clickjacking) (Chromium (moteur de Chrome))

    Pourquoi d'abord : Un site tiers peut piéger les clics sur la page de connexion : comptes clients exposés et confiance perdue. Effort : faible

    Page : https://riad-connect-hub.lovable.app/auth

    Attendu : Ces pages refusent d'être affichées dans un cadre étranger

    Constaté : Encadrables : /auth

    Correction conseillée : Envoyer Content-Security-Policy: frame-ancestors 'none' (et X-Frame-Options: DENY).

  3. #5MineurEn-têtes de sécurité absents sur riad-connect-hub.lovable.app (ordinateur · Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : En-têtes de sécurité présents

    Constaté : Manquants : Content-Security-Policy, Permissions-Policy

    Correction conseillée : Les ajouter dans la configuration de l'hébergeur (fichier _headers Netlify, vercel.json...).

  4. #6RemarqueCross-Origin-Opener-Policy absente : une fenêtre ouverte par un autre site garde un lien vers la vôtre (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Cross-Origin-Opener-Policy: same-origin (ou same-origin-allow-popups si des fenêtres de paiement/connexion sont utilisées)

    Constaté : Cross-Origin-Opener-Policy: absent

    Correction conseillée : Ajouter Cross-Origin-Opener-Policy: same-origin-allow-popups, puis same-origin si aucun parcours n'en souffre.

  5. #7MajeurAccessibilité : champ-sans-libelle (label) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone (Chromium (moteur de Chrome))

    Pourquoi d'abord : Une partie des visiteurs (clavier, malvoyants) ne peut pas aller au bout : ce sont des réservations perdues, et l'accessibilité devient une obligation légale sur plusieurs marchés. Effort : faible

    Page : https://riad-connect-hub.lovable.app/contact

    Attendu : Conforme WCAG 2.2 AA — WCAG 2.2 : 4.1.2 Nom, rôle et valeur (A), 1.3.1 Information et relations (A) · RGAA 4.1 : 11.1 Champ de formulaire avec étiquette

    Correction conseillée : axe-core (moteur de référence) : corriger chaque élément cité.

    Détail technique

    Constaté : input[maxlength="100"] Form elements must have labels; input[maxlength="100"] Form elements must have labels

  6. Une cause → un correctifAucun bandeau de consentement aux cookies détecté sur riad-connect-hub.lovable.app : 2 constats, un seul correctif

    Cause : Même défaut « Aucun bandeau de consentement aux cookies détecté sur riad-connect-hub.lovable.app » répété : probablement un composant ou un gabarit commun.

    Correctif unique : Corriger une fois dans le composant ou le gabarit commun, puis revérifier toutes les pages citées.

    Constats : #8, #9

  7. #8MineurAucun bandeau de consentement aux cookies détecté sur riad-connect-hub.lovable.app (Chromium (moteur de Chrome))

    Pourquoi d'abord : Ces points ne bloquent pas le parcours mais méritent d'être traités. Effort : moyen

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Un bandeau qui demande l'accord (accepter / refuser / personnaliser)

    Constaté : Ni outil de consentement connu, ni texte « cookies » avec un bouton d'acceptation, alors que des traceurs ou cookies de mesure sont présents.

    Correction conseillée : Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Installez un outil de gestion du consentement et bloquez les traceurs tant que le visiteur n'a pas choisi.

  8. #9MineurCookies de mesure ou de publicité déposés avant tout consentement sur riad-connect-hub.lovable.app (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Seuls des cookies techniques (session, panier, langue) avant l'accord

    Constaté : Déposés sans accord : __cf_bm (supabase.co, tiers)

    Correction conseillée : Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Déposez ces cookies seulement après l'accord, et proposez « Refuser » aussi simplement que « Accepter ».

Le reste

0Critique
2Majeur
11Mineur
4Remarque
  • Une cause → un correctifPas de lien vers la politique de confidentialité : 2 constats, un seul correctif

    Cause : Même défaut « Pas de lien vers la politique de confidentialité » répété : probablement un composant ou un gabarit commun.

    Correctif unique : Corriger une fois dans le composant ou le gabarit commun, puis revérifier toutes les pages citées.

    Constats : #10, #11

  • #10MineurPas de lien vers la politique de confidentialité (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Un lien vers la politique de confidentialité (RGPD / loi 09-08)

    Constaté : Aucun lien ni texte « confidentialité / privacy / données personnelles » trouvé sur l'accueil.

    Correction conseillée : Publier une politique de confidentialité et la lier depuis le pied de page.

  • #11MineurPas de mentions légales (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Des mentions légales (éditeur, hébergeur, contact)

    Constaté : Aucun lien « mentions légales / CGU / CGV / legal » trouvé sur l'accueil.

    Correction conseillée : Ajouter une page de mentions légales liée depuis le pied de page.

  • Une cause → un correctifPages et images trop lourdes : 3 constats, un seul correctif

    Cause : Images et ressources servies trop lourdes, probablement sans compression ni dimension adaptée.

    Correctif unique : Compresser et redimensionner les images (WebP ou AVIF, srcset) une fois dans la chaîne de publication.

    Constats : #12, #13, #14

  • #12Mineur1 image(s) trop lourde(s) pour leur taille d'affichage (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Images < 300 Ko, dimensionnées pour l'affichage

    Constaté : ttps://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg : 461 Ko, 1920 px affichés en 1440 px

    Correction conseillée : SVG ou WebP pour le logo ; images responsives (srcset, AVIF/WebP) ; préchargement de l'image principale.

  • #13MineurFichiers JavaScript lourds : 1 fichier(s) au-dessus de 500 Ko (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Chaque fichier ≤ 500 Ko transférés

    Constaté : https://riad-connect-hub.lovable.app/assets/index-BYEaChBb.js (text/javascript) : 574 Ko décompressés (167 Ko transférés)

    Correction conseillée : Découper le JavaScript par page (code splitting), retirer les bibliothèques inutilisées (tree shaking), minifier et compresser (brotli) ; différer les scripts non essentiels (defer/async).

  • #14MineurImages lourdes : 1 fichier(s) au-dessus de 300 Ko (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Chaque fichier ≤ 300 Ko transférés

    Constaté : https://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg (image/jpeg) : 462 Ko

    Correction conseillée : Convertir en WebP ou AVIF, redimensionner à la taille d'affichage (srcset), viser moins de 200 Ko par image ; charger en différé celles qui sont sous la ligne de flottaison.

  • Une cause → un correctifChargement lent : 2 constats, un seul correctif

    Cause : Trop de ressources à charger avant l'affichage, surtout sur réseau mobile.

    Correctif unique : Alléger et différer images et scripts, et mettre en cache les ressources communes.

    Constats : #15, #16

  • #15MineurChargement lent (6564 ms) : / — téléphone uniquement (téléphone · Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Chargement < 3000 ms

    Constaté : / 6564 ms

    Correction conseillée : Mesurer avec Lighthouse ; compresser les images, decouper le JavaScript, mettre en cache.

  • #16MineurLent sur téléphone en réseau lent : LCP 4464 ms, chargement 4405 ms (non confirmé) (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : LCP ≤ 4000 ms et chargement ≤ 10000 ms dans ces conditions (profil mobile de Lighthouse)

    Constaté : LCP 4464 ms, chargement 4405 ms (2 mesure(s), non confirmé)

    Correction conseillée : Alléger d'abord l'élément principal affiché (image ou titre) : image compressée et préchargée (rel=preload), CSS critique en ligne, JavaScript différé ; servir les fichiers depuis un CDN proche des visiteurs.

  • #17MineurPages de connexion ouvertes aux moteurs de recherche (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/auth

    Attendu : noindex et Disallow sur les espaces privés

    Constaté : Indexables : /auth ; robots.txt : User-agent: Googlebot Allow: / User-agent: Bingbot Allow: / User-agent: Twitterbot Allow: / User-agent: facebookexter

    Correction conseillée : Ajouter <meta name=robots content=noindex> et Disallow: /admin, /vendeur (ou équivalents).

  • #18RemarquePas de /.well-known/security.txt (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/.well-known/security.txt

    Attendu : Un fichier security.txt indiquant comment signaler une faille (RFC 9116)

    Constaté : HTTP 404

    Correction conseillée : Ajouter /.well-known/security.txt avec un contact de sécurité.

  • #19RemarqueAccessibilité : ordre-titres (heading-order) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/faq

    Attendu : Conforme WCAG 2.2 AA — RGAA 4.1 : 9.1 Hiérarchie des titres

    Correction conseillée : axe-core (moteur de référence) : corriger chaque élément cité.

    Détail technique

    Constaté : .border-b:nth-child(1) > h3 Heading levels should only increase by one; .border-b:nth-child(1) > h3 Heading levels should only increase by one

  • #20RemarqueRéférencement : 1 problème(s) sur riad-connect-hub.lovable.app (Chromium (moteur de Chrome))

    Page : https://riad-connect-hub.lovable.app/

    Attendu : Canonical propre à chaque langue, og:image, titres distincts

    Constaté : sans canonical : /; /auth; /contact; /faq (+3)

    Correction conseillée : Canonical auto-référent par langue, og:image/og:title partout, titre et canonical sur chaque page.

Par thème

  • Sécurité et confiance — Une faille expose les comptes et les données des clients ; la confiance perdue coûte des réservations et engage l'éditeur.
    4 constat(s), dont 1 majeur(s) ou critique(s) ; 2 correctif(s) suffisent. #4, #5, #6, #18
  • Accessibilité — Une partie des visiteurs (clavier, malvoyants) ne peut pas aller au bout : ce sont des réservations perdues, et l'accessibilité devient une obligation légale sur plusieurs marchés.
    2 constat(s), dont 1 majeur(s) ou critique(s) ; 2 correctif(s) suffisent. #7, #19
  • Obligations légales — Ces informations sont généralement obligatoires pour un site qui vend en ligne ; leur absence expose l'éditeur et rassure moins les acheteurs.
    4 constat(s), dont 0 majeur(s) ou critique(s) ; 2 correctif(s) suffisent. #8, #9, #10, #11
  • Vitesse de chargement — Une page lente fait partir les visiteurs avant même de voir l'offre, surtout sur téléphone : moins de réservations.
    5 constat(s), dont 0 majeur(s) ou critique(s) ; 2 correctif(s) suffisent. #12, #13, #14, #15, #16
  • Référencement — Le référencement amène des visiteurs sans payer ; des pages mal décrites ou mal indexées en apportent moins.
    2 constat(s), dont 0 majeur(s) ou critique(s) ; 2 correctif(s) suffisent. #17, #20

Prochaines étapes

  1. Corriger les 5 points « à corriger d'abord », dans l'ordre.
  2. Appliquer les 6 correctifs groupés : chacun règle plusieurs constats à la fois.
  3. Traiter ensuite les constats mineurs restants, section par section.
  4. Relancer un test Avalyz pour vérifier les corrections.
  5. Élargir le périmètre aux 5 zone(s) non testée(s) (par exemple avec un compte de test).

Testé : Smoke (chargement, erreurs, mobile), Navigateurs, En-tetes de securite et anti-encadrement, Accessibilite (partiel), Sondes en lecture seule, SEO, marque, images, cookies, Appareils, Liens cassés, Formulaires, RGPD et cookies, Pages, Zone connectée, Parcours par rôle (partiel), Profil « client », Comptes de recette créés, Visuel et langues, Logique metier (partiel), Securite applicative, API / integration (partiel), Resilience, Conformite, Bout en bout par role, Performance, Scénarios métier (partiel), À vérifier (sans constat) (partiel). Non testé : Regression visuelle, Securite des donnees, Statique, Unitaire, Composant. L'absence d'un constat ne prouve pas que tout fonctionne : seul ce qui est listé a été vérifié.

Limites de couverture

  • Accessibilite : partiel — axe-core sur chaque page (bureau et téléphone) + focus clavier ; critères WCAG 2.2 et RGAA 4.1 cités dans les constats ; compléments navigateur : 7 page(s) (7 pages lues sur 7 visitées (mode complet)), contraste mesuré sur 14 texte(s) (clair, et sombre sur 7 page(s)), 280 tabulation(s) (119 élément(s) vérifiés pour le focus visible, 0 fenêtre(s) modale(s) cachée(s) parcourue(s) sans clic, 0 piège(s)), noms accessibles vérifiés sur 7 page(s), 0 PDF lié(s) non audité(s)
  • Regression visuelle : non testé — Aucune reference approuvee : approuve un passage comme reference.
  • Parcours par rôle : partiel — 2 pages, 33 actions relevées, 0 action jouée (lecture seule) — rôle « avalyz-test-client-3895909e@test.avalyz.com »
  • Logique metier : partiel — logique métier décrite par le client jouée par les scénarios métier (voir la ligne « Scénarios métier ») ; aucune idée « Depuis ton idée » à rapprocher
  • API / integration : partiel — pas de spécification OpenAPI trouvée (/openapi.json, /swagger.json, /api-docs, /api/openapi.json…) ; sondes GET : /api → 406, /api/health → 406, /graphql → 406 — importe le contrat de l'API pour des cas par opération ; spec reconstituée depuis le navigateur (7 page(s) — 7 pages lues sur 7 visitées (mode complet), 9 appel(s) observé(s), aucune requête ajoutée) : 1 point(s) d'entrée — POST /__l5e/trackevents [?] ; 0 constat(s)
  • Securite des donnees : non testé — aucune base détectée (Supabase : clé anon dans la page ; Firebase : apiKey + databaseURL) — le contrôle RLS demande un accès à la base ou une clé publique visible
  • Scénarios métier : partiel — 16 cas conçus (1 nominal, 5 secondaires, 10 limites) ; joués : 16 (mode complet : CN-1, CS-1, CS-2, CS-3, CS-4, CS-5, CL-1, CL-2, CL-3, CL-4, CL-5, CL-6, CL-7, CL-8, CL-9, CL-10) ; 10 réussis / 3 échecs / 0 bloqués / 2 non jouables ; 1 attendu(s) deviné(s) par le BA non vérifié(s) : à confirmer par le client (non déclarés) — CL-10 ; CS-4 non joué : élément introuvable : input[type=text] — à confirmer ; CL-8 non joué : élément introuvable : input[type=text] — à confirmer ; écriture autorisée, 41 soumission(s) ; exploration en jouant : 4 écran(s) découvert(s) (https://riad-connect-hub.lovable.app/book/atlas?checkIn=2026-11-10&checkOut=2026-11-12&adults=2&children=0, https://riad-connect-hub.lovable.app/book/majorelle?checkIn=2026-11-10&checkOut=2026-11-12&adults=2&children=0, https://riad-connect-hub.lovable.app/book/koutoubia?checkIn=2026-11-10&checkOut=202
  • Statique : non testé — code source non fourni (champ « URL du code source » du panneau) ou mode rapide
  • Unitaire : non testé — code source non fourni (champ « URL du code source » du panneau) ou mode rapide
  • Composant : non testé — code source non fourni (champ « URL du code source » du panneau) ou mode rapide
  • Niveaux : partiel — 6/13 exécutés, 3 partiels, 4 non testés (sur 13 niveaux du plan) ; demandés : 6/10 faits
  • À vérifier (sans constat) : partiel — 1 point(s) non mesuré(s), sans constat : Accessibilité : contraste à vérifier à la main — fond non uni (image, dégradé, élément superposé ou transparence) : 17 sélecteur(s) sur 7 page(s) — .tracking-\[0\.25em\] : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; h1 : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; .max-w-xl : Element's background color could not be determined due to a bac
Durées du test
  • 6912 msplan du site (0 adresse(s) à visiter en plus)
  • 11721 mscréation des comptes de recette (1/1 créé(s))
  • 1615 msnavigation bureau p1 (chargement 583, réseau calme 1013, relevés 19)
  • 6170 msa11y bureau p1
  • 444 msfocus clavier bureau p1
  • 3111 mscapture bureau p1
  • 1277 msnavigation bureau p2 (chargement 639, réseau calme 622, relevés 16)
  • 1003 msa11y bureau p2
  • 175 mscapture bureau p2
  • 1371 msnavigation bureau p3 (chargement 588, réseau calme 767, relevés 16)
  • 694 msa11y bureau p3
  • 136 mscapture bureau p3
  • 1241 msnavigation bureau p4 (chargement 487, réseau calme 728, relevés 26)
  • 799 msa11y bureau p4
  • 105 mscapture bureau p4
  • 1259 msnavigation bureau p5 (chargement 554, réseau calme 692, relevés 13)
  • 1022 msa11y bureau p5
  • 164 mscapture bureau p5
  • 1189 msnavigation bureau p6 (chargement 514, réseau calme 664, relevés 11)
  • 662 msa11y bureau p6
  • 103 mscapture bureau p6
  • 3612 msconnexion avec le compte de test (client) (réussie)
  • 1796 msnavigation bureau p1 (chargement 507, réseau calme 1271, relevés 18)
  • 533 msa11y bureau p1
  • 97 mscapture bureau p1
  • 1535 msnavigation bureau p2 (chargement 436, réseau calme 1077, relevés 22)
  • 916 msa11y bureau p2
  • 1863 mscapture bureau p2
  • 562 mssondes (robots.txt, pages inexistantes, paramètres, limites)
  • 91 msliens (0 lien(s) vérifié(s) (plafond 50), 0 fil(s) réellement utilisé(s) sur 4, délai 8000 ms par lien, périmètre 3 ms, requêtes 0 ms, lien le plus lent 0 ms, 0 non vérifié(s) (délai ou réseau), 0 erreur(s) HTTP)
  • 8691 msrgpd (visite en navigateur neuf + capture)
  • 7305 msnavigation telephone p1 (chargement 6572, réseau calme 715, relevés 18)
  • 5949 msa11y telephone p1
  • 1065 mscapture telephone p1
  • 1187 msnavigation telephone p2 (chargement 506, réseau calme 667, relevés 14)
  • 615 msa11y telephone p2
  • 87 mscapture telephone p2
  • 1238 msnavigation telephone p3 (chargement 497, réseau calme 730, relevés 11)
  • 554 msa11y telephone p3
  • 49 mscapture telephone p3

Décision GO / NO-GO motivée

NO-GO
Détail technique

The dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conc

Motifs (preuves)

  • 14 cas conformes sur 23 joués ; 3 non conforme(s) ; 1 non concluant(s) ; 5 bloqué(s).
  • Cas non conformes : CS-5, CL-3, CL-5.
  • Hygiène technique : 0 constat(s) critique(s), 2 majeur(s), 15 mineur(s).

Avis d'expert

Décision : NO-GO

Arguments

  1. voir le détail technique (fort)
    preuves : processus:CLI-02, processus:CLI-03, processus:CLI-04, CN-2, CS-21, CS-22, I3, I4
  2. voir le détail technique (fort)
    preuves : CN-1, CN-2, CS-21, CS-22, I3, I4, I5
  3. voir le détail technique (fort)
    preuves : CS-5, I1, processus:CLI-07, https://riad-connect-hub.lovable.app/rev
  4. voir le détail technique (moyen)
    preuves : CL-3, I2, processus:CLI-01
  5. voir le détail technique (moyen)
    preuves : CL-10, I6
  6. voir le détail technique (moyen)
    preuves : processus:ADM-01, processus:ADM-02, processus:ADM-03, processus:ADM-04
  7. voir le détail technique (moyen)
    preuves : processus:VIS-01, I8, https://riad-connect-hub.lovable.app/roo, https://riad-connect-hub.lovable.app/
  8. voir le détail technique (faible)
    preuves : CL-6, CL-7, CL-1, CL-2, CL-4, CL-9, CL-21, CL-22

Risques résiduels

  • voir le détail technique
  • voir le détail technique
  • voir le détail technique
  • voir le détail technique
  • voir le détail technique
  • voir le détail technique

Périmètre de l'avis

  • testé : voir le détail technique
  • non testé : voir le détail technique

Confiance : moyenne

Détail technique

Arguments : The core revenue path (search -> room -> summary with tax and RIAD10 -> 30% deposit -> booking number) was never validated end to end, so the riad's only online income flow is unproven.

Arguments : The nominal booking scenario CN-1 is reported as successful, but the same money path replayed as CN-2, CS-21 and CS-22 could not be played (missing elements), so the success of CN-1 is not corroborated on the deposit and confirmation steps.

Arguments : A defect on the review restriction promised to guests ('only guests who have stayed may publish a review') is reproduced twice, which directly undermines the credibility of the riad's ratings.

Arguments : A past arrival date is not blocked before any deposit can be taken (CL-3 failed, CLI-01 in defect), even though the second attempt in I2 was non-conclusive, leaving a booking that is unpayable and unserviceable.

Arguments : The written promise 'cancellation possible up to 48 hours before arrival' could not be verified: CL-10 is 'to be confirmed' and its replay I6 is non-conclusive, so a client-facing commitment is neither confirmed nor refuted.

Arguments : The manager side of the business (booking calendar, blocked dates, rooms and prices, contact messages) is entirely untested, so the riad cannot be shown to be able to operate the bookings the site would generate.

Arguments : The room and nightly price display promised on the home page is not covered: VIS-01 has no case and the /rooms page returns HTTP 404.

Arguments : Some checks did pass: sign-in with wrong password and short password (CL-6, CL-7), empty and incoherent search dates (CL-1, CL-2), zero adults (CL-4), empty contact form (CL-9), unknown promo code (CL-21) and invalid card number (CL-22) behaved as expected.

Risques résiduels : A booking could be created or paid without the deposit, tax or RIAD10 discount being correctly computed, since CLI-02/CLI-03/CLI-04 were never exercised (I3, I4, I5 non-conclusive).

Risques résiduels : A guest could book a stay in the past or with an uncapped guest count (CL-3, CL-5 failed) and reach a payment step that should have been blocked.

Risques résiduels : The 48-hour cancellation promise may be applied wrongly (refusing a legitimate cancellation or refunding a non-refundable stay) since CL-10 and I6 are non-conclusive.

Risques résiduels : Reviews may be publishable without a past stay (C01 reproduced in I1), damaging the riad's reputation and its direct-booking argument.

Risques résiduels : The manager has no verified way to follow bookings, block dates, manage prices or read messages (ADM-01 to ADM-04 uncovered), so operational failures would surface only after real bookings arrive.

Risques résiduels : The contact form could not be exercised (CS-4, CL-8 non-playable), so warm leads may be lost or stored corrupted without the manager being able to answer.

testé : Availability search by dates and guests (VIS-02, CS-1, CL-1, CL-2, CL-4), Sign-in (ACC-02, CL-6, CL-7), FAQ and reviews reading (VIS-03, CS-2), My bookings empty state (CLI-05, CS-3), Review publication restriction (CLI-07, CS-5, C01, I1), Room choice and dates (CLI-01, CN-1, CL-3), Booking summary, deposit and booking number partially (CN-1, CS-20, CL-20, CL-21, CL-22), Contact message (SUP-01, CL-9), Accessibility, visual and languages, application security, resilience, compliance, performance, end-to-end by role (couverture)

non testé : VIS-01 Browse rooms and nightly prices (non_couvert; /rooms returns HTTP 404, I8), ACC-01 Create an account (non_couvert), CLI-02 Review booking summary with tax and promo (non_couvert), CLI-03 Pay the 30% deposit online (non_couvert), CLI-04 Receive booking number (non_couvert), CLI-06 Cancel a booking (non_joue, CL-10 non-conclusive), ADM-01 Follow the booking calendar (non_couvert), ADM-02 Block dates (non_couvert), ADM-03 Manage rooms and prices (non_couvert), ADM-04 Read contact messages (non_couvert), Data security (couverture: non teste), API / integration (couverture: partiel, no OpenA

Avalyz prouve ce qu'il a vu, il ne garantit pas le reste : ce qui n'a pas été testé n'est pas couvert. Sans compte de test, les pages connectées ne sont pas explorées ; avec un compte de test, la connexion est le seul formulaire soumis.

Le rapport complet d'un compte (parcours, preuves, format ISO 29119) est réservé aux comptes.

Avalyzاختبر تطبيقًا آخر

7/7 صفحات

تقرير نموذجي

تطبيق خيالي أُنشئ للعرض: لا توجد بيانات حقيقية. سيتبع تقريرك البنية نفسها.

اختبر تطبيقي

ما الذي ينكسر في تطبيقك

Riad Dar Zitoun

riad-connect-hub.lovable.app

العنوان المختبَر: https://riad-connect-hub.lovable.app/ · 2026-10-09 · اختبار كامل مع طلب وضع الكتابة (بيانات اختبار فقط، دون أي دفع حقيقي أو حذف) · 7 صفحات مزارة · 10 مستويات اختبار · الحكم محسوب كما يراه الناشر · التطبيق قيد البناء

التقرير الموجز

القرار

رفض
تفاصيل تقنية

The dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conc

رصد اختبار riad-connect-hub.lovable.app عدد 20 ملاحظة، منها 4 حرجة أو رئيسية (S1 و S2)، وتعود إلى 12 إصلاحات. يُعالج أولًا: مسار عمل يفشل، ثم مسار عمل يفشل، ثم يمكن عرض صفحات الدخول داخل موقع آخر (clickjacking).

أرقام أساسية

7صفحات مختبَرة
23حالات عمل منفَّذة14 ناجحة · 3 فاشلة · 0 متوقفة
20ملاحظات0 حرج · 4 مهم · 12 طفيف · 4 ملاحظة

يُصلَح أولًا

  1. #1مهممسار عمل يفشل — /
    لا يستطيع العميل إكمال مسار يدرّ المال: الحجوزات ضائعة حتى الإصلاح.
  2. #2طفيفمسار عمل يفشل — /
  3. #3مهممسار عمل يفشل — /reviews
    لا يستطيع العميل إكمال مسار يدرّ المال: الحجوزات ضائعة حتى الإصلاح.
  4. #4مهميمكن عرض صفحات الدخول داخل موقع آخر (clickjacking) — /auth
    يمكن لموقع خارجي اختطاف النقرات على صفحة الدخول: حسابات العملاء معرضة والثقة مفقودة.
  5. #5طفيفترويسات الأمان غائبة — /

الخطوات التالية

  1. إصلاح النقاط الـ5 المصنّفة «تُصلح أولًا» بالترتيب.
  2. تطبيق الإصلاحات المجمّعة الـ6: كل واحد منها يعالج عدة ملاحظات دفعة واحدة.
  3. ثم معالجة الملاحظات الثانوية المتبقية، قسمًا بعد قسم.
  4. إعادة تشغيل اختبار Avalyz للتحقق من الإصلاحات.

التقرير المفصّل

فهمنا للنشاط (للتأكيد)

تُعرض نصوص التحليل باللغة التي كُتب بها التحليل.

بُني هذا الفهم مما يُظهره التطبيق؛ ويجب أن تؤكده فرق العمل قبل أن يُبنى عليه قرار.

المفهوم

Riad Dar Zitoun is a five-room guesthouse in the Medina of Marrakech selling direct room bookings online, with a 30% deposit paid through a simulated payment. It targets travellers (couples, small families, groups) who want a riad stay near the Koutoubia, promising transparent nightly prices, instant booking and free cancellation up to 48 h before arrival.

العملاء المستهدفون: Travellers seeking a guesthouse stay in the Medina of Marrakech (couples, small families, groups of 2 to 4 guests) and the riad manager who administers bookings, rooms, prices and messages.

سلسلة القيمة

  1. AttractVIS-01, VIS-02, VIS-03
  2. ConvertCLI-01, CLI-02, CLI-03
  3. DeliverCLI-04, CLI-05
  4. Collect cashCLI-03, CLI-06
  5. RetainCLI-07, SUP-01
  6. AdministerADM-01, ADM-02, ADM-03, ADM-04

نموذج العمل

شرائح العملاءTravellers to Marrakech: couples, small families and groups of 2 to 4 guests; direct bookers avoiding OTAs.
عرض القيمةA peaceful five-room riad by the Koutoubia, clear nightly prices in MAD, direct booking with a 30% deposit and free cancellation up to 48 h.
القنواتOwn website (French with EN switch), room pages, availability search, contact form, FAQ, guest reviews.
مصادر الإيراداتDirect room bookings per night in MAD, 30% deposit paid online (simulated), tourist tax 30 MAD per adult per night; promo RIAD10 -10% on accommodation.
الشركاء الرئيسيونNone visible on the site; the client description mentions no external partner (payment is simulated).

التنظيم

الهيكل الوظيفي: فضاءات التطبيق وملفات المستخدمين. ★ = ملف معتمد في الاختبار.

  • riad-connect-hub.lovable.app
    • Public website (visitor)
      • Visitor (not signed in) VIS ★
    • Guest area (signed-in traveller)
      • Guest / traveller (signed-in customer) CLI ★
    • Manager back-office (مُعلن، غير مرئي)
      • Manager (only administrator) ADM

جدول الوظائف

الوظيفة (الملف)المهمةأهم المسؤولياتمعتمد في الاختبار
Visitor (not signed in) VISDiscover the riad and its rooms and start an availability search without an account.
  • Consult room list and nightly prices
  • Run availability searches
  • Contact the riad
★ نعم
Guest / traveller (signed-in customer) CLIBook a stay, pay the deposit and manage the booking until departure.
  • Complete a booking with correct dates and guests
  • Pay the 30% deposit online
  • Cancel at least 48 h before arrival if needed
★ نعم
Manager (only administrator) ADMOperate the riad: keep the calendar, rooms, prices and guest messages under control.
  • Follow incoming bookings
  • Block unavailable dates
  • Maintain rooms, prices and messages
لا

المجالات

أساسي

  • Discovery and content VIS-01, VIS-03
  • Booking and availability VIS-02, CLI-01, CLI-02
  • Payment and deposit CLI-03, CLI-04
  • Stay and after-sales CLI-05, CLI-06

داعم

  • Account and authentication ACC-01, ACC-02
  • Riad administration ADM-01, ADM-02, ADM-03, ADM-04
  • Customer support and contact SUP-01
  • Communication and reviews CLI-07

خريطة العمليات الكبرى والعمليات

عملية كبرىالعمليةالملفالنتائجالتغطية
Attract travellers
أساسي · Discovery and content
VIS-01 — Browse rooms and nightly pricesVIS✓ Five rooms and prices displayed, ✗ Page unavailableغير مختبَر
VIS-03 — Read FAQ and reviewsVIS✓ FAQ questions and reviews page displayed, ✗ No answer shown under FAQ questionمختبَر: مطابق (CS-2)
Attract travellers
أساسي · Booking and availability
VIS-02 — Search availability by dates and guestsVIS✓ Availability results shown, ✗ Missing arrival or departure date, ✗ Departure before arrival, ✗ Guests exceed room capacityمختبَر: عيب (CS-1, CL-1, CL-2, CL-4, CL-5)
Sell a stay
أساسي · Booking and availability
CLI-01 — Choose a room and datesCLI✓ Room available for the dates, ✗ Room already booked on overlapping dates, ✗ Guests exceed room capacity, ✗ Dates in the past, ✗ Stay shorter than 1 nightمختبَر: عيب (CN-1, CL-3)
CLI-02 — Review booking summary with tax and promoCLI✓ Discounted total and tax shown, ✗ Invalid promo code, ✗ Promo applied to tourist taxغير مختبَر
Sell a stay
أساسي · Payment and deposit
CLI-03 — Pay the 30% deposit onlineCLI✓ Deposit accepted, booking number issued, ✗ Payment refused, ✗ Payment abandoned by guest, ✗ Room taken before paymentغير مختبَر
CLI-04 — Receive booking numberCLI✓ Booking number displayed, ✗ Confirmation not receivedغير مختبَر
Manage the stay
أساسي · Stay and after-sales
CLI-05 — Consult My bookingsCLI✓ Bookings listed, ✗ No booking yetمختبَر: مطابق (CS-3)
CLI-06 — Cancel a bookingCLI✓ Booking cancelled, ✗ Less than 48 h before arrival, ✗ Cancellation refusedلم يُشغَّل (CL-10)
Manage account
داعم · Account and authentication
ACC-01 — Create an accountVIS✓ Account created, confirmation e-mail sent, ✗ Password shorter than 6 characters, ✗ E-mail already usedغير مختبَر
ACC-02 — Sign inVIS✓ Signed in, My bookings visible, ✗ Wrong credentials, ✗ Password shorter than 6 charactersمختبَر: مطابق (CL-6, CL-7)
Operate the riad
داعم · Riad administration
ADM-01 — Follow the booking calendarADM✓ New booking visible on calendar, ✗ Booking not found, ✗ Access denied to non-managerغير مختبَر
ADM-02 — Block datesADM✓ Dates blocked, ✗ Dates overlap an existing bookingغير مختبَر
ADM-03 — Manage rooms and pricesADM✓ Room or price updated, ✗ Invalid price or capacityغير مختبَر
ADM-04 — Read contact messagesADM✓ Message read, ✗ No message receivedغير مختبَر
Support guests
داعم · Customer support and contact
SUP-01 — Send a contact messageVIS✓ Message sent, ✗ Missing name, e-mail or message, ✗ Invalid e-mailمختبَر: مطابق (CS-4, CL-8, CL-9)
Build trust
داعم · Communication and reviews
CLI-07 — Publish a guest reviewCLI✓ Review published, ✗ Guest has not stayed at the riad, ✗ Not signed inمختبَر: عيب (CS-5)

قواعد التسيير الأساسية لكل عملية

العمليةقاعدة التسييرالمصدر
VIS-01 — Browse rooms and nightly pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.مقروءة في الموقع : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.مقروءة في الموقع : « 900 MAD / nuit »
VIS-02 — Search availability by dates and guestsRG-03 — The search form requires an arrival date and a departure date.مقروءة في الموقع : « Arrivée Départ »
RG-04 — Adults are bounded between 1 and 4 and children between 0 and 3.مقروءة في الموقع : « Adultes Enfants »
RG-05 — The riad has five rooms around a patio of orange trees.للتأكيد
VIS-03 — Read FAQ and reviewsRG-06 — Only guests who have stayed at the riad may publish a review.مقروءة في الموقع : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
ACC-01 — Create an accountRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.مقروءة في الموقع : « E-mail Mot de passe »
RG-08 — Sign-up is with e-mail and password, with a confirmation e-mail.للتأكيد
ACC-02 — Sign inRG-07 — Sign-in requires an e-mail and a password of at least 6 characters.مقروءة في الموقع : « E-mail Mot de passe »
CLI-01 — Choose a room and datesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.مقروءة في الموقع : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.مقروءة في الموقع : « 900 MAD / nuit »
RG-09 — A room can never be booked twice on overlapping dates.للتأكيد
RG-10 — No booking in the past.للتأكيد
RG-11 — Minimum stay of 1 night.للتأكيد
CLI-02 — Review booking summary with tax and promoRG-12 — Tourist tax is 30 MAD per adult per night.للتأكيد
RG-13 — Promo code RIAD10 gives 10% off the accommodation only; the tourist tax is never discounted.للتأكيد
RG-14 — The 30% deposit is computed on the discounted total, tax included.للتأكيد
CLI-03 — Pay the 30% deposit onlineRG-15 — The deposit is 30% of the total and is paid online.للتأكيد
RG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.للتأكيد
RG-17 — The environment is a TEST environment, not production.للتأكيد
CLI-04 — Receive booking numberRG-16 — Payment is SIMULATED, never a real payment; a booking number is issued.للتأكيد
CLI-05 — Consult My bookingsRG-18 — A signed-in guest sees 'Mes réservations' with 'Vous n'avez pas encore de réservation.' when empty.مقروءة في الموقع : « Vous n'avez pas encore de réservation. »
CLI-06 — Cancel a bookingRG-19 — Cancellation is allowed up to 48 hours before arrival.مقروءة في الموقع : « Annulation possible jusqu'à 48 h avant l'arrivée. »
CLI-07 — Publish a guest reviewRG-06 — Only guests who have stayed at the riad may publish a review.مقروءة في الموقع : « Seuls les hôtes ayant séjourné au riad peuvent publier un avis. »
RG-20 — Reviews page shows 'Aucun avis pour le moment.' when no review exists.مقروءة في الموقع : « Aucun avis pour le moment. »
SUP-01 — Send a contact messageRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).مقروءة في الموقع : « Nom complet E-mail Sujet Message »
ADM-01 — Follow the booking calendarRG-22 — The manager is the only administrator.للتأكيد
ADM-02 — Block datesRG-09 — A room can never be booked twice on overlapping dates.للتأكيد
RG-22 — The manager is the only administrator.للتأكيد
ADM-03 — Manage rooms and pricesRG-01 — Room capacities: Atlas 2 guests, Majorelle 3, Suite Koutoubia 4, Palmeraie 2, Menara 2.مقروءة في الموقع : « Atlas 2 pers. »
RG-02 — Nightly prices: Atlas 900 MAD, Majorelle 1 200 MAD, Suite Koutoubia 1 800 MAD, Palmeraie 750 MAD, Menara 1 000 MAD.مقروءة في الموقع : « 900 MAD / nuit »
RG-22 — The manager is the only administrator.للتأكيد
ADM-04 — Read contact messagesRG-21 — The contact form requires a full name, an e-mail and a message (subject optional).مقروءة في الموقع : « Nom complet E-mail Sujet Message »
RG-22 — The manager is the only administrator.للتأكيد

دفتر الاستلام

تُعرض نصوص التحليل باللغة التي كُتب بها التحليل.

كل حالة اختبار مستمدة من الفهم أعلاه؛ وكل نتيجة محصّلة مرفقة بأدلتها.

المرجعقصة المستخدمالنتيجة المتوقعةالنتيجة المحصّلة والأدلةالتوصية
CN-1As a signed-in traveller, I want to book the Majorelle room for 2 nights for 2 adults with code RIAD10, so that I pay a deposit computed on the discounted total.
CLI-01 · RG-01 · RG-02 · RG-03 · RG-04 · RG-12
Availability results show the Majorelle room; the booking summary shows the tourist tax, the RIAD10 discount and a 30% deposit amount; the simulated payment page is reached and the amount is verified.

مطابق

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)
  • POST /rest/v1/rpc/available_rooms → 200 (بيانات)

سلامة الصفحات المرتبطة: #4, #17

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CS-1As a visitor, I want to search availability for 4 adults and 3 children, so that I know whether the riad can host my group before booking.
VIS-02 · RG-01 · RG-04 · RG-05
The search returns results or an explicit message that no room matches 4 adults and 3 children; no room above its capacity is offered.

مطابق

ردود الخادم

  • POST /rest/v1/rpc/available_rooms → 200 (بيانات)

سلامة الصفحات المرتبطة: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CS-2As a visitor, I want to read the FAQ answers about payment, tourist tax, cancellation and promo code, so that I can decide to book with confidence.
VIS-03 · RG-06
Each FAQ question opens or reveals an answer; if no answer text appears, the promise of a usable FAQ is broken.

مطابق

سلامة الصفحات المرتبطة: #19

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CS-3As a signed-in guest, I want to open My bookings and see my booking list, so that I can check my stay before arrival.
CLI-05 · RG-18 · RG-19
The signed-in guest sees 'Mes réservations', the 48 h cancellation notice and the empty-state message when no booking exists.

مطابق

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: #4, #17

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CS-4As a visitor, I want to send a contact message with my name, e-mail and question, so that the riad answers me before I book.
SUP-01 · RG-21
The message is accepted and a success confirmation is displayed; no validation error appears.

غير قابل للتنفيذ

لم يُنفَّذ: عنصر غير موجود: input[type=text] — يُؤكَّد لاحقًا

سلامة الصفحات المرتبطة: #7

رفع العائق (لم يُنفَّذ: عنصر غير موجود: input[type=text] — يُؤكَّد لاحقًا) ثم إعادة التنفيذ.
CS-5As a signed-in guest, I want to try to publish a review before my stay, so that I understand the review rules of the riad.
CLI-07 · RG-06 · RG-20
The rule is enforced: a guest without a past stay cannot publish a review, and the page states the restriction.

غير مطابق

نص لا ينبغي ظهوره موجود: « Aucun avis pour le moment. »

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)
  • POST /rest/v1/rpc/has_past_stay → 200 (بيانات)

سلامة الصفحات المرتبطة: #4, #17

ملاحظة: #3

الخطورة S2: حالة ثانوية أو حدّية مهمة للنشاط لا تتصرف كما وُعد. أعد تنفيذ الخطوات بحساب الاختبار، أصلح، ثم أعد اختبار القبول.
CL-1As a visitor, I want to submit the search without an arrival date, so that I see the required-field message and correct my entry.
VIS-02 · RG-03
The search is refused or blocked while the required arrival date is empty; no availability result is produced.

مطابق

ردود الخادم

  • POST /rest/v1/rpc/available_rooms → 200 (بيانات)

سلامة الصفحات المرتبطة: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-2As a visitor, I want to enter a departure before my arrival, so that the site tells me the dates are inconsistent instead of showing wrong results.
VIS-02 · RG-03 · RG-11
The site refuses the inverted dates or shows an explicit error; no room is offered for a negative-length stay.

مطابق

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-3As a visitor, I want to search with a past arrival date, so that the site prevents me from booking a stay in the past.
CLI-01 · RG-10
The past dates are rejected or produce no bookable room; no booking can be started in the past.

غير مطابق

نص لا ينبغي ظهوره موجود: « 900 MAD / nuit »

سلامة الصفحات المرتبطة: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

ملاحظة: #1

الخطورة S2: حالة ثانوية أو حدّية مهمة للنشاط لا تتصرف كما وُعد. أعد تنفيذ الخطوات بحساب الاختبار، أصلح، ثم أعد اختبار القبول.
CL-4As a visitor, I want to set zero adults, so that the site refuses an impossible occupancy instead of pricing an empty room.
VIS-02 · RG-04
Zero adults is refused by the field constraint or by an explicit message; no room is offered.

مطابق

ردود الخادم

  • POST /rest/v1/rpc/available_rooms → 200 (بيانات)

سلامة الصفحات المرتبطة: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-5As a visitor, I want to enter more than four adults, so that the site caps the value at the maximum allowed.
VIS-02 · RG-04
The field caps the value at 4 or the search is refused; no result is produced for 5 adults.

غير مطابق

نص لا ينبغي ظهوره موجود: « 5 »

سلامة الصفحات المرتبطة: #5, #6, #8, #9, #10, #11, #12, #13, #14, #15

ملاحظة: #2

الخطورة S3: حالة حدّية لا تتصرف كما هو متوقع. أعد تنفيذ الخطوات بحساب الاختبار، أصلح، ثم أعد اختبار القبول.
CL-6As a visitor, I want to sign in with a wrong password, so that the site refuses access and protects the guest account.
ACC-02 · RG-07
Access is refused with an error message; the guest area and My bookings stay unreachable.

مطابق

سلامة الصفحات المرتبطة: #4, #17

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-7As a visitor, I want to sign in with a too-short password, so that the site enforces its minimum password length.
ACC-02 · RG-07
The short password is refused by the field constraint or by an error message; no session is opened.

مطابق

ردود الخادم

  • POST /auth/v1/token → 400 (بيانات)

سلامة الصفحات المرتبطة: #4, #17

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-8As a visitor, I want to submit the contact form with an invalid e-mail and accented text, so that the site validates the address and stores my message correctly.
SUP-01 · RG-21
The invalid e-mail is refused with a validation message; the message is not sent and no success confirmation appears.

غير قابل للتنفيذ

لم يُنفَّذ: عنصر غير موجود: input[type=text] — يُؤكَّد لاحقًا

سلامة الصفحات المرتبطة: #7

رفع العائق (لم يُنفَّذ: عنصر غير موجود: input[type=text] — يُؤكَّد لاحقًا) ثم إعادة التنفيذ.
CL-9As a visitor, I want to submit the contact form empty, so that the site tells me which fields are required.
SUP-01 · RG-21
The send is blocked and the required fields (name, e-mail, message) are flagged; no success confirmation appears.

مطابق

سلامة الصفحات المرتبطة: #7

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-10As a signed-in guest, I want to cancel my booking around the 48-hour deadline, so that I know exactly when cancellation is still allowed.
CLI-06 · RG-19
The cancellation is accepted more than 48 h before arrival and refused less than 48 h before; the displayed rule matches the behaviour.

غير حاسم — للتأكيد

النص المتوقع غائب: « Annulation possible jusqu'à 48 h avant l'arrivée. » (الصفحة: « Riad Dar Zitoun Accueil Disponibilités Avis FAQ Contact EN Connexion Connexion E-mail Mot de passe ConnexionPas encore de compte ? Créer un compte Riad Dar Zito »)

سلامة الصفحات المرتبطة: #4, #17

تأكيد النتيجة المتوقعة مع فريق العمل ثم إعادة التنفيذ.
CN-2As a signed-in traveller, I want to book the Majorelle room for 2 nights with code RIAD10, so that I pay a deposit computed on the discounted total.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted · the 30% deposit is computed on the discounted total, tax included
A booking confirmation screen appears with a booking number and the paid deposit of 684 MAD (accommodation 2,160 MAD after RIAD10 + 120 MAD tax = 2,280 MAD total).

غير قابل للتنفيذ

لم يُنفَّذ: عنصر غير موجود: input >> nth=0 — يُؤكَّد لاحقًا

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

رفع العائق (لم يُنفَّذ: عنصر غير موجود: input >> nth=0 — يُؤكَّد لاحقًا) ثم إعادة التنفيذ.
CS-20As a signed-in traveller, I want to book the Suite Koutoubia without a promo code, so that I can secure the most expensive room at its full price.
Booking with deposit payment · the 30% deposit is computed on the total, tax included
Confirmation with a booking number and a deposit of 1,116 MAD (3,600 MAD accommodation + 120 MAD tax = 3,720 MAD total).

مطابق

دفع في وضع الاختبار (المزوّد: simulation)

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CS-21As a signed-in traveller, I want to book the Palmeraie room with code RIAD10, so that I get the cheapest stay with the promised discount.
Booking with deposit payment · RIAD10 gives 10% off the accommodation only · the tourist tax is never discounted
Confirmation with a booking number and a deposit of 441 MAD (1,350 MAD accommodation after RIAD10 + 120 MAD tax = 1,470 MAD total).

غير قابل للتنفيذ

لم يُنفَّذ: عنصر غير موجود: text=Payer l'acompte et confirmer · 441 MAD — يُؤكَّد لاحقًا

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

رفع العائق (لم يُنفَّذ: عنصر غير موجود: text=Payer l'acompte et confirmer · 441 MAD — يُؤكَّد لاحقًا) ثم إعادة التنفيذ.
CS-22As a signed-in traveller, I want to find my new Atlas booking in My bookings, so that I can check the dates and the deposit I paid.
Booking follow-up · a booking made by the traveller must appear in My bookings
My bookings lists the Atlas booking with the 2026-11-10 to 2026-11-12 dates and the 576 MAD deposit.

غير قابل للتنفيذ

لم يُنفَّذ: عنصر غير موجود: input >> nth=0 — يُؤكَّد لاحقًا

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

رفع العائق (لم يُنفَّذ: عنصر غير موجود: input >> nth=0 — يُؤكَّد لاحقًا) ثم إعادة التنفيذ.
CL-20As a signed-in traveller, I want the booking form to refuse an empty name and e-mail, so that my confirmation is not lost.
Booking with deposit payment · Nom complet and E-mail are required
The booking is refused: the required name and e-mail fields block the submission and no confirmation appears.

مطابق

دفع في وضع الاختبار (المزوّد: simulation)

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-21As a signed-in traveller, I want an unknown promo code to be refused, so that I am not charged a wrong deposit.
Booking with deposit payment · only RIAD10 gives 10% off the accommodation
The unknown code is refused and the deposit stays at 576 MAD (1,800 MAD accommodation + 120 MAD tax = 1,920 MAD).

مطابق

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

الإبقاء على هذه الحالة في اختبارات عدم التراجع.
CL-22As a signed-in traveller, I want an invalid card number to be refused, so that I do not believe a deposit was paid.
Booking with deposit payment · the payment is simulated but the card number must be valid
The payment is refused and no booking confirmation appears.

مطابق

دفع في وضع الاختبار (المزوّد: simulation)

ردود الخادم

  • POST /auth/v1/token → 200 (بيانات)

سلامة الصفحات المرتبطة: لا توجد ملاحظة تقنية على هذه الصفحات

الإبقاء على هذه الحالة في اختبارات عدم التراجع.

السلامة التقنية

اختبار قبول riad-connect-hub.lovable.app: 20 ملاحظة و12 إصلاحات مطلوبة

رصد اختبار riad-connect-hub.lovable.app عدد 20 ملاحظة، منها 4 حرجة أو رئيسية (S1 و S2)، وتعود إلى 12 إصلاحات. يُعالج أولًا: مسار عمل يفشل، ثم مسار عمل يفشل، ثم يمكن عرض صفحات الدخول داخل موقع آخر (clickjacking).

تم العثور على 17 مشكلات، منها 2 يجب إصلاحها أولًا.

أصلح هذه أولًا

  1. سبب واحد ← إصلاح واحديمكن عرض صفحات الدخول داخل موقع آخر (clickjacking): 3 ملاحظات وإصلاح واحد

    السبب: الخلل نفسه «يمكن عرض صفحات الدخول داخل موقع آخر (clickjacking)» يتكرر: على الأرجح مكوّن أو قالب مشترك واحد.

    إصلاح واحد: إرسال الترويسة Content-Security-Policy: frame-ancestors 'none' (و X-Frame-Options: DENY).

    الملاحظات : #4, #5, #6

  2. #4مهميمكن عرض صفحات الدخول داخل موقع آخر (clickjacking) — /auth (Chromium (محرّك Chrome))

    لماذا أولًا: يمكن لموقع خارجي اختطاف النقرات على صفحة الدخول: حسابات العملاء معرضة والثقة مفقودة. الجهد : منخفض

    الصفحة: https://riad-connect-hub.lovable.app/auth

    الملاحظ: Encadrables : /auth

    تفاصيل تقنية

    العنوان الأصلي: Pages de connexion affichables dans un autre site (clickjacking)

    المتوقع: Ces pages refusent d'être affichées dans un cadre étranger

    الإصلاح الموصى به: Envoyer Content-Security-Policy: frame-ancestors 'none' (et X-Frame-Options: DENY).

  3. #5طفيفترويسات الأمان غائبة — / (الحاسوب · Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: En-têtes de sécurité absents sur riad-connect-hub.lovable.app

    المتوقع: En-têtes de sécurité présents

    الملاحظ: Manquants : Content-Security-Policy, Permissions-Policy

    الإصلاح الموصى به: Les ajouter dans la configuration de l'hébergeur (fichier _headers Netlify, vercel.json...).

  4. #6ملاحظةترويسات الأمان غائبة — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Cross-Origin-Opener-Policy absente : une fenêtre ouverte par un autre site garde un lien vers la vôtre

    المتوقع: Cross-Origin-Opener-Policy: same-origin (ou same-origin-allow-popups si des fenêtres de paiement/connexion sont utilisées)

    الملاحظ: Cross-Origin-Opener-Policy: absent

    الإصلاح الموصى به: Ajouter Cross-Origin-Opener-Policy: same-origin-allow-popups, puis same-origin si aucun parcours n'en souffre.

  5. #7مهمحقول نموذج بلا تسمية — /contact (Chromium (محرّك Chrome))

    لماذا أولًا: جزء من الزوار (مستخدمو لوحة المفاتيح وضعاف البصر) لا يستطيعون الإكمال: إنها الحجوزات ضائعة، وإمكانية الوصول أصبحت التزامًا قانونيًا في عدة أسواق. الجهد : منخفض

    الصفحة: https://riad-connect-hub.lovable.app/contact

    تفاصيل تقنية

    العنوان الأصلي: Accessibilité : champ-sans-libelle (label) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone

    المتوقع: Conforme WCAG 2.2 AA — WCAG 2.2 : 4.1.2 Nom, rôle et valeur (A), 1.3.1 Information et relations (A) · RGAA 4.1 : 11.1 Champ de formulaire avec étiquette

    الملاحظ: input[maxlength="100"] Form elements must have labels; input[maxlength="100"] Form elements must have labels

    الإصلاح الموصى به: axe-core (moteur de référence) : corriger chaque élément cité.

  6. سبب واحد ← إصلاح واحدملاحظة S3 — /: 2 ملاحظات وإصلاح واحد

    السبب: الخلل نفسه «ملاحظة S3 — /» يتكرر: على الأرجح مكوّن أو قالب مشترك واحد.

    إصلاح واحد: أصلحه مرة واحدة في المكوّن أو القالب المشترك، ثم أعد فحص كل الصفحات المذكورة.

    الملاحظات : #8, #9

  7. #8طفيفملاحظة S3 — / (Chromium (محرّك Chrome))

    لماذا أولًا: هذه النقاط لا تعطّل المسار لكنها تستحق المعالجة. الجهد : متوسط

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Aucun bandeau de consentement aux cookies détecté sur riad-connect-hub.lovable.app

    المتوقع: Un bandeau qui demande l'accord (accepter / refuser / personnaliser)

    الملاحظ: Ni outil de consentement connu, ni texte « cookies » avec un bouton d'acceptation, alors que des traceurs ou cookies de mesure sont présents.

    الإصلاح الموصى به: Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Installez un outil de gestion du consentement et bloquez les traceurs tant que le visiteur n'a pas choisi.

  8. #9طفيفملاحظة S3 — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Cookies de mesure ou de publicité déposés avant tout consentement sur riad-connect-hub.lovable.app

    المتوقع: Seuls des cookies techniques (session, panier, langue) avant l'accord

    الملاحظ: Déposés sans accord : __cf_bm (supabase.co, tiers)

    الإصلاح الموصى به: Le RGPD et la directive « ePrivacy » (en France, les règles de la CNIL ; au Maroc, la loi 09-08 et la CNDP) demandent l'accord du visiteur AVANT de déposer un cookie ou d'appeler un service qui sert à mesurer l'audience ou à faire de la publicité. Les cookies strictement nécessaires (session, panier, langue) n'ont pas besoin d'accord. Déposez ces cookies seulement après l'accord, et proposez « Refuser » aussi simplement que « Accepter ».

الباقي

0حرج
2مهم
11طفيف
4ملاحظة
  • سبب واحد ← إصلاح واحدلا يوجد رابط لسياسة الخصوصية: 2 ملاحظات وإصلاح واحد

    السبب: الخلل نفسه «لا يوجد رابط لسياسة الخصوصية» يتكرر: على الأرجح مكوّن أو قالب مشترك واحد.

    إصلاح واحد: أصلحه مرة واحدة في المكوّن أو القالب المشترك، ثم أعد فحص كل الصفحات المذكورة.

    الملاحظات : #10, #11

  • #10طفيفلا يوجد رابط لسياسة الخصوصية — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Pas de lien vers la politique de confidentialité

    المتوقع: Un lien vers la politique de confidentialité (RGPD / loi 09-08)

    الملاحظ: Aucun lien ni texte « confidentialité / privacy / données personnelles » trouvé sur l'accueil.

    الإصلاح الموصى به: Publier une politique de confidentialité et la lier depuis le pied de page.

  • #11طفيفلا توجد بيانات قانونية — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Pas de mentions légales

    المتوقع: Des mentions légales (éditeur, hébergeur, contact)

    الملاحظ: Aucun lien « mentions légales / CGU / CGV / legal » trouvé sur l'accueil.

    الإصلاح الموصى به: Ajouter une page de mentions légales liée depuis le pied de page.

  • سبب واحد ← إصلاح واحدصفحات وصور ثقيلة جدًا: 3 ملاحظات وإصلاح واحد

    السبب: الصور والموارد ثقيلة جدًا، على الأرجح دون ضغط أو أبعاد مناسبة.

    إصلاح واحد: ضغط الصور وتغيير أبعادها (WebP أو AVIF و srcset) مرة واحدة في سلسلة النشر.

    الملاحظات : #12, #13, #14

  • #12طفيفصفحات وصور ثقيلة جدًا — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: 1 image(s) trop lourde(s) pour leur taille d'affichage

    المتوقع: Images < 300 Ko, dimensionnées pour l'affichage

    الملاحظ: ttps://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg : 461 Ko, 1920 px affichés en 1440 px

    الإصلاح الموصى به: SVG ou WebP pour le logo ; images responsives (srcset, AVIF/WebP) ; préchargement de l'image principale.

  • #13طفيفصفحات وصور ثقيلة جدًا — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Fichiers JavaScript lourds : 1 fichier(s) au-dessus de 500 Ko

    المتوقع: Chaque fichier ≤ 500 Ko transférés

    الملاحظ: https://riad-connect-hub.lovable.app/assets/index-BYEaChBb.js (text/javascript) : 574 Ko décompressés (167 Ko transférés)

    الإصلاح الموصى به: Découper le JavaScript par page (code splitting), retirer les bibliothèques inutilisées (tree shaking), minifier et compresser (brotli) ; différer les scripts non essentiels (defer/async).

  • #14طفيفصفحات وصور ثقيلة جدًا — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    الملاحظ: https://riad-connect-hub.lovable.app/assets/hero-O0-s_7b9.jpg (image/jpeg) : 462 Ko

    تفاصيل تقنية

    العنوان الأصلي: Images lourdes : 1 fichier(s) au-dessus de 300 Ko

    المتوقع: Chaque fichier ≤ 300 Ko transférés

    الإصلاح الموصى به: Convertir en WebP ou AVIF, redimensionner à la taille d'affichage (srcset), viser moins de 200 Ko par image ; charger en différé celles qui sont sous la ligne de flottaison.

  • سبب واحد ← إصلاح واحدتحميل بطيء: 2 ملاحظات وإصلاح واحد

    السبب: موارد كثيرة يجب تحميلها قبل العرض، خاصة على شبكة الهاتف.

    إصلاح واحد: تخفيف الصور والسكربتات وتأجيلها وتخزين الموارد المشتركة مؤقتًا.

    الملاحظات : #15, #16

  • #15طفيفتحميل بطيء (6564 ms) — / (الهاتف · Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    المتوقع: Chargement < 3000 ms

    الملاحظ: / 6564 ms

    تفاصيل تقنية

    العنوان الأصلي: Chargement lent (6564 ms) : / — téléphone uniquement

    الإصلاح الموصى به: Mesurer avec Lighthouse ; compresser les images, decouper le JavaScript, mettre en cache.

  • #16طفيفتحميل بطيء (4464 ms, 4405 ms) — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Lent sur téléphone en réseau lent : LCP 4464 ms, chargement 4405 ms (non confirmé)

    المتوقع: LCP ≤ 4000 ms et chargement ≤ 10000 ms dans ces conditions (profil mobile de Lighthouse)

    الملاحظ: LCP 4464 ms, chargement 4405 ms (2 mesure(s), non confirmé)

    الإصلاح الموصى به: Alléger d'abord l'élément principal affiché (image ou titre) : image compressée et préchargée (rel=preload), CSS critique en ligne, JavaScript différé ; servir les fichiers depuis un CDN proche des visiteurs.

  • #17طفيفصفحات الدخول مفتوحة لمحركات البحث — /auth (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/auth

    تفاصيل تقنية

    العنوان الأصلي: Pages de connexion ouvertes aux moteurs de recherche

    المتوقع: noindex et Disallow sur les espaces privés

    الملاحظ: Indexables : /auth ; robots.txt : User-agent: Googlebot Allow: / User-agent: Bingbot Allow: / User-agent: Twitterbot Allow: / User-agent: facebookexter

    الإصلاح الموصى به: Ajouter <meta name=robots content=noindex> et Disallow: /admin, /vendeur (ou équivalents).

  • #18ملاحظةلا يوجد ملف security.txt — /.well-known/security.txt (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/.well-known/security.txt

    الملاحظ: HTTP 404

    تفاصيل تقنية

    العنوان الأصلي: Pas de /.well-known/security.txt

    المتوقع: Un fichier security.txt indiquant comment signaler une faille (RFC 9116)

    الإصلاح الموصى به: Ajouter /.well-known/security.txt avec un contact de sécurité.

  • #19ملاحظةمستويات العناوين غير متسلسلة — /faq (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/faq

    تفاصيل تقنية

    العنوان الأصلي: Accessibilité : ordre-titres (heading-order) (2 occurrence(s) sur 1 page(s)) — ordinateur, téléphone

    المتوقع: Conforme WCAG 2.2 AA — RGAA 4.1 : 9.1 Hiérarchie des titres

    الملاحظ: .border-b:nth-child(1) > h3 Heading levels should only increase by one; .border-b:nth-child(1) > h3 Heading levels should only increase by one

    الإصلاح الموصى به: axe-core (moteur de référence) : corriger chaque élément cité.

  • #20ملاحظةتحسين الظهور في محركات البحث — / (Chromium (محرّك Chrome))

    الصفحة: https://riad-connect-hub.lovable.app/

    تفاصيل تقنية

    العنوان الأصلي: Référencement : 1 problème(s) sur riad-connect-hub.lovable.app

    المتوقع: Canonical propre à chaque langue, og:image, titres distincts

    الملاحظ: sans canonical : /; /auth; /contact; /faq (+3)

    الإصلاح الموصى به: Canonical auto-référent par langue, og:image/og:title partout, titre et canonical sur chaque page.

حسب الموضوع

  • الأمان والثقة — أي ثغرة تعرّض حسابات العملاء وبياناتهم للخطر؛ وفقدان الثقة يكلّف الحجوزات ويُحمّل الناشر المسؤولية.
    عدد الملاحظات: 4، منها 1 حرجة أو رئيسية؛ يكفي 2 إصلاح. #4, #5, #6, #18
  • إمكانية الوصول — جزء من الزوار (مستخدمو لوحة المفاتيح وضعاف البصر) لا يستطيعون الإكمال: إنها الحجوزات ضائعة، وإمكانية الوصول أصبحت التزامًا قانونيًا في عدة أسواق.
    عدد الملاحظات: 2، منها 1 حرجة أو رئيسية؛ يكفي 2 إصلاح. #7, #19
  • الالتزامات القانونية — هذه المعلومات إلزامية عادةً لموقع يبيع عبر الإنترنت؛ وغيابها يعرّض الناشر للمساءلة ويقلّل طمأنة المشترين.
    عدد الملاحظات: 4، منها 0 حرجة أو رئيسية؛ يكفي 2 إصلاح. #8, #9, #10, #11
  • سرعة التحميل — الصفحة البطيئة تجعل الزوار يغادرون قبل رؤية العرض، خاصة على الهاتف: الحجوزات أقل.
    عدد الملاحظات: 5، منها 0 حرجة أو رئيسية؛ يكفي 2 إصلاح. #12, #13, #14, #15, #16
  • الظهور في محركات البحث — محركات البحث تجلب الزوار مجانًا؛ والصفحات سيئة الوصف أو الفهرسة تجلب عددًا أقل.
    عدد الملاحظات: 2، منها 0 حرجة أو رئيسية؛ يكفي 2 إصلاح. #17, #20

الخطوات التالية

  1. إصلاح النقاط الـ5 المصنّفة «تُصلح أولًا» بالترتيب.
  2. تطبيق الإصلاحات المجمّعة الـ6: كل واحد منها يعالج عدة ملاحظات دفعة واحدة.
  3. ثم معالجة الملاحظات الثانوية المتبقية، قسمًا بعد قسم.
  4. إعادة تشغيل اختبار Avalyz للتحقق من الإصلاحات.
  5. توسيع النطاق ليشمل 5 مجالات غير مختبرة (مثلًا بحساب تجريبي).

ما اختُبر: إمكانية الوصول (جزئي)، المنطقة بعد الدخول، المسارات حسب الدور (جزئي)، منطق العمل (جزئي)، أمان التطبيق، الواجهات البرمجية / التكامل (جزئي)، الامتثال، من البداية للنهاية حسب الدور، الأداء، سيناريوهات العمل (جزئي)، 15 مجالات أخرى. ما لم يُختبر: الانحدار البصري، أمن البيانات، التحليل الثابت، اختبارات الوحدات، المكوّنات. غياب ملاحظة لا يثبت أن كل شيء يعمل: لم يُفحص إلا ما هو مذكور.

حدود التغطية

  • إمكانية الوصول : جزئي
    تفاصيل تقنية

    axe-core sur chaque page (bureau et téléphone) + focus clavier ; critères WCAG 2.2 et RGAA 4.1 cités dans les constats ; compléments navigateur : 7 page(s) (7 pages lues sur 7 visitées (mode complet)), contraste mesuré sur 14 texte(s) (clair, et sombre sur 7 page(s)), 280 tabulation(s) (119 élément(s) vérifiés pour le focus visible, 0 fenêtre(s) modale(s) cachée(s) parcourue(s) sans clic, 0 piège(s)), noms accessibles vérifiés sur 7 page(s), 0 PDF lié(s) non audité(s)

  • الانحدار البصري : لم يُختبر
    تفاصيل تقنية

    Aucune reference approuvee : approuve un passage comme reference.

  • المسارات حسب الدور : جزئي
    تفاصيل تقنية

    2 pages, 33 actions relevées, 0 action jouée (lecture seule) — rôle « [email] »

  • منطق العمل : جزئي
    تفاصيل تقنية

    logique métier décrite par le client jouée par les scénarios métier (voir la ligne « Scénarios métier ») ; aucune idée « Depuis ton idée » à rapprocher

  • الواجهات البرمجية / التكامل : جزئي
    تفاصيل تقنية

    pas de spécification OpenAPI trouvée (/openapi.json, /swagger.json, /api-docs, /api/openapi.json…) ; sondes GET : /api → 406, /api/health → 406, /graphql → 406 — importe le contrat de l'API pour des cas par opération ; spec reconstituée depuis le navigateur (7 page(s) — 7 pages lues sur 7 visitées (mode complet), 9 appel(s) observé(s), aucune requête ajoutée) : 1 point(s) d'entrée — POST /__l5e/trackevents [?] ; 0 constat(s)

  • أمن البيانات : لم يُختبر
    تفاصيل تقنية

    aucune base détectée (Supabase : clé anon dans la page ; Firebase : apiKey + databaseURL) — le contrôle RLS demande un accès à la base ou une clé publique visible

  • سيناريوهات العمل : جزئي
    تفاصيل تقنية

    16 cas conçus (1 nominal, 5 secondaires, 10 limites) ; joués : 16 (mode complet : CN-1, CS-1, CS-2, CS-3, CS-4, CS-5, CL-1, CL-2, CL-3, CL-4, CL-5, CL-6, CL-7, CL-8, CL-9, CL-10) ; 10 réussis / 3 échecs / 0 bloqués / 2 non jouables ; 1 attendu(s) deviné(s) par le BA non vérifié(s) : à confirmer par le client (non déclarés) — CL-10 ; CS-4 non joué : élément introuvable : input[type=text] — à confirmer ; CL-8 non joué : élément introuvable : input[type=text] — à confirmer ; écriture autorisée, 41 soumission(s) ; exploration en jouant : 4 écran(s) découvert(s) (htt

  • التحليل الثابت : لم يُختبر
    تفاصيل تقنية

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • اختبارات الوحدات : لم يُختبر
    تفاصيل تقنية

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • المكوّنات : لم يُختبر
    تفاصيل تقنية

    code source non fourni (champ « URL du code source » du panneau) ou mode rapide

  • مجال آخر : جزئي
    تفاصيل تقنية

    Niveaux

    6/13 exécutés, 3 partiels, 4 non testés (sur 13 niveaux du plan) ; demandés : 6/10 faits

  • مجال آخر : جزئي
    تفاصيل تقنية

    À vérifier (sans constat)

    1 point(s) non mesuré(s), sans constat : Accessibilité : contraste à vérifier à la main — fond non uni (image, dégradé, élément superposé ou transparence) : 17 sélecteur(s) sur 7 page(s) — .tracking-\[0\.25em\] : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; h1 : Element's background color could not be determined due to a background gradient — 1 page(s) : / ; .max-w-xl : Element's background color could not be determined due to a bac

مدد الاختبار
  • 6912 msplan du site (0 adresse(s) à visiter en plus)
  • 11721 mscréation des comptes de recette (1/1 créé(s))
  • 1615 msnavigation bureau p1 (chargement 583, réseau calme 1013, relevés 19)
  • 6170 msa11y bureau p1
  • 444 msfocus clavier bureau p1
  • 3111 mscapture bureau p1
  • 1277 msnavigation bureau p2 (chargement 639, réseau calme 622, relevés 16)
  • 1003 msa11y bureau p2
  • 175 mscapture bureau p2
  • 1371 msnavigation bureau p3 (chargement 588, réseau calme 767, relevés 16)
  • 694 msa11y bureau p3
  • 136 mscapture bureau p3
  • 1241 msnavigation bureau p4 (chargement 487, réseau calme 728, relevés 26)
  • 799 msa11y bureau p4
  • 105 mscapture bureau p4
  • 1259 msnavigation bureau p5 (chargement 554, réseau calme 692, relevés 13)
  • 1022 msa11y bureau p5
  • 164 mscapture bureau p5
  • 1189 msnavigation bureau p6 (chargement 514, réseau calme 664, relevés 11)
  • 662 msa11y bureau p6
  • 103 mscapture bureau p6
  • 3612 msconnexion avec le compte de test (client) (réussie)
  • 1796 msnavigation bureau p1 (chargement 507, réseau calme 1271, relevés 18)
  • 533 msa11y bureau p1
  • 97 mscapture bureau p1
  • 1535 msnavigation bureau p2 (chargement 436, réseau calme 1077, relevés 22)
  • 916 msa11y bureau p2
  • 1863 mscapture bureau p2
  • 562 mssondes (robots.txt, pages inexistantes, paramètres, limites)
  • 91 msliens (0 lien(s) vérifié(s) (plafond 50), 0 fil(s) réellement utilisé(s) sur 4, délai 8000 ms par lien, périmètre 3 ms, requêtes 0 ms, lien le plus lent 0 ms, 0 non vérifié(s) (délai ou réseau), 0 erreur(s) HTTP)
  • 8691 msrgpd (visite en navigateur neuf + capture)
  • 7305 msnavigation telephone p1 (chargement 6572, réseau calme 715, relevés 18)
  • 5949 msa11y telephone p1
  • 1065 mscapture telephone p1
  • 1187 msnavigation telephone p2 (chargement 506, réseau calme 667, relevés 14)
  • 615 msa11y telephone p2
  • 87 mscapture telephone p2
  • 1238 msnavigation telephone p3 (chargement 497, réseau calme 730, relevés 11)
  • 554 msa11y telephone p3
  • 49 mscapture telephone p3

قرار GO / NO-GO معلّل

رفض
تفاصيل تقنية

The dossier shows a site whose core money path (availability search -> room choice -> booking summary with tourist tax and RIAD10 promo -> 30% deposit -> booking number) was never validated end to end: the nominal booking scenarios CN-1, CN-2, CS-20, CS-21 and CS-22 either failed or could not be played, and CLI-02, CLI-03, CLI-04 and ADM-01 remain uncovered. Confirmed defects hit the funnel before any money is taken (CLI-01 with CL-3 past-date search, VIS-02, CLI-07 review restriction reproduced twice in I1) and the written 48-hour cancellation promise could not be verified (CL-10, I6 non-conc

الأسباب (الأدلة)

  • 14 حالة مطابقة من 23 منفّذة؛ 3 غير مطابقة؛ 1 غير حاسمة؛ 5 متوقفة.
  • الحالات غير المطابقة: CS-5, CL-3, CL-5.
  • السلامة التقنية: 0 حرجة، 2 كبيرة، 15 صغيرة.

رأي الخبير

القرار: رفض

الحجج

  1. انظر التفاصيل التقنية (قوي)
    الأدلة : processus:CLI-02, processus:CLI-03, processus:CLI-04, CN-2, CS-21, CS-22, I3, I4
  2. انظر التفاصيل التقنية (قوي)
    الأدلة : CN-1, CN-2, CS-21, CS-22, I3, I4, I5
  3. انظر التفاصيل التقنية (قوي)
    الأدلة : CS-5, I1, processus:CLI-07, https://riad-connect-hub.lovable.app/rev
  4. انظر التفاصيل التقنية (متوسط)
    الأدلة : CL-3, I2, processus:CLI-01
  5. انظر التفاصيل التقنية (متوسط)
    الأدلة : CL-10, I6
  6. انظر التفاصيل التقنية (متوسط)
    الأدلة : processus:ADM-01, processus:ADM-02, processus:ADM-03, processus:ADM-04
  7. انظر التفاصيل التقنية (متوسط)
    الأدلة : processus:VIS-01, I8, https://riad-connect-hub.lovable.app/roo, https://riad-connect-hub.lovable.app/
  8. انظر التفاصيل التقنية (ضعيف)
    الأدلة : CL-6, CL-7, CL-1, CL-2, CL-4, CL-9, CL-21, CL-22

المخاطر المتبقية

  • انظر التفاصيل التقنية
  • انظر التفاصيل التقنية
  • انظر التفاصيل التقنية
  • انظر التفاصيل التقنية
  • انظر التفاصيل التقنية
  • انظر التفاصيل التقنية

نطاق الرأي

  • مختبَر : انظر التفاصيل التقنية
  • غير مختبَر : انظر التفاصيل التقنية

درجة الثقة: متوسطة

تفاصيل تقنية

الحجج: The core revenue path (search -> room -> summary with tax and RIAD10 -> 30% deposit -> booking number) was never validated end to end, so the riad's only online income flow is unproven.

الحجج: The nominal booking scenario CN-1 is reported as successful, but the same money path replayed as CN-2, CS-21 and CS-22 could not be played (missing elements), so the success of CN-1 is not corroborated on the deposit and confirmation steps.

الحجج: A defect on the review restriction promised to guests ('only guests who have stayed may publish a review') is reproduced twice, which directly undermines the credibility of the riad's ratings.

الحجج: A past arrival date is not blocked before any deposit can be taken (CL-3 failed, CLI-01 in defect), even though the second attempt in I2 was non-conclusive, leaving a booking that is unpayable and unserviceable.

الحجج: The written promise 'cancellation possible up to 48 hours before arrival' could not be verified: CL-10 is 'to be confirmed' and its replay I6 is non-conclusive, so a client-facing commitment is neither confirmed nor refuted.

الحجج: The manager side of the business (booking calendar, blocked dates, rooms and prices, contact messages) is entirely untested, so the riad cannot be shown to be able to operate the bookings the site would generate.

الحجج: The room and nightly price display promised on the home page is not covered: VIS-01 has no case and the /rooms page returns HTTP 404.

الحجج: Some checks did pass: sign-in with wrong password and short password (CL-6, CL-7), empty and incoherent search dates (CL-1, CL-2), zero adults (CL-4), empty contact form (CL-9), unknown promo code (CL-21) and invalid card number (CL-22) behaved as expected.

المخاطر المتبقية: A booking could be created or paid without the deposit, tax or RIAD10 discount being correctly computed, since CLI-02/CLI-03/CLI-04 were never exercised (I3, I4, I5 non-conclusive).

المخاطر المتبقية: A guest could book a stay in the past or with an uncapped guest count (CL-3, CL-5 failed) and reach a payment step that should have been blocked.

المخاطر المتبقية: The 48-hour cancellation promise may be applied wrongly (refusing a legitimate cancellation or refunding a non-refundable stay) since CL-10 and I6 are non-conclusive.

المخاطر المتبقية: Reviews may be publishable without a past stay (C01 reproduced in I1), damaging the riad's reputation and its direct-booking argument.

المخاطر المتبقية: The manager has no verified way to follow bookings, block dates, manage prices or read messages (ADM-01 to ADM-04 uncovered), so operational failures would surface only after real bookings arrive.

المخاطر المتبقية: The contact form could not be exercised (CS-4, CL-8 non-playable), so warm leads may be lost or stored corrupted without the manager being able to answer.

مختبَر: Availability search by dates and guests (VIS-02, CS-1, CL-1, CL-2, CL-4)، Sign-in (ACC-02, CL-6, CL-7)، FAQ and reviews reading (VIS-03, CS-2)، My bookings empty state (CLI-05, CS-3)، Review publication restriction (CLI-07, CS-5, C01, I1)، Room choice and dates (CLI-01, CN-1, CL-3)، Booking summary, deposit and booking number partially (CN-1, CS-20, CL-20, CL-21, CL-22)، Contact message (SUP-01, CL-9)، Accessibility, visual and languages, application security, resilience, compliance, performance, end-to-end by role (couverture)

غير مختبَر: VIS-01 Browse rooms and nightly prices (non_couvert; /rooms returns HTTP 404, I8)، ACC-01 Create an account (non_couvert)، CLI-02 Review booking summary with tax and promo (non_couvert)، CLI-03 Pay the 30% deposit online (non_couvert)، CLI-04 Receive booking number (non_couvert)، CLI-06 Cancel a booking (non_joue, CL-10 non-conclusive)، ADM-01 Follow the booking calendar (non_couvert)، ADM-02 Block dates (non_couvert)، ADM-03 Manage rooms and prices (non_couvert)، ADM-04 Read contact messages (non_couvert)، Data security (couverture: non teste)، API / integration (couverture: partiel, no OpenA

يثبت Avalyz ما رآه ولا يضمن الباقي: ما لم يُختبر غير مشمول. دون حساب اختبار لا تُستكشف الصفحات المتصلة؛ ومع حساب اختبار، تسجيل الدخول هو النموذج الوحيد المُرسل.

التقرير الكامل للحساب (المسارات، الأدلة، صيغة ISO 29119) مخصص للحسابات.

English · Français · العربية