Issues

Report bugs and request features to help improve the platform.

2

[editor] Mux video uploads

Closed

- Upload API: signed URLs for direct browser-to-Mux upload - Upload UI: drag-drop in VideoEditPanel, progress bar, processing status - Playback: HLS adaptive streaming, poster/thumbnail, autoplay/loop/muted controls - Tier gating: Free=0, Basic=5, Premium=25, Pro=unlimited **Files:** `src/components/editor/VideoEditPanel.tsx`, new `src/lib/mux.ts`, new `app/api/video/upload/route.ts`

#26 opened by SAL3 months ago
1
2

[migration] Fix fixed-width layout mapping and import all i18n versions

Closed

- Account for legacy `margin-right`, `padding` values when calculating column config - Map legacy `fixedwidthconfig` gap/margin to new column layout gutter setting - Preserve visual density (e.g. 3 items at 300px with 10px gap on 960px container = 3 columns with 10px gutter) - Import ALL i18n language variants (currently only imports German preferentially) - Set `default_language` from legacy user language field, `languages` array from found content **Files:** `app/api/migration/import-stream/route.ts`, `src/lib/legacy-layout-mapper.ts`

#22 opened by SAL3 months ago
0
1

Preserve scroll position when switching between edit and view mode

Closed

Description: When switching between edit and view mode, the page automatically jumps back to the top. This interrupts the workflow, especially when working on longer pages, as the user has to manually scroll back to the previous position each time. Suggested solution: Preserve the current scroll position when switching between edit and view mode. Benefit: This would create a smoother and more efficient workflow, especially for longer pages, by maintaining context and reducing unnecessary navigation. Optional enhancement: Make this behavior configurable (e.g. “preserve scroll position” vs. “always scroll to top”), allowing users to choose the behavior that best fits their workflow.

#52 opened by benjakon2 months ago
3
1

Slideshow playback is unreliable (does not start or stops prematurely)

Closed

The slideshow mode does not run reliably. In some cases, the slideshow does not start at all. In other cases, it starts but stops after a few images (e.g. after 2–3 slides). This issue occurs inconsistently and affects both desktop and mobile devices.

#47 opened by benjakon2 months ago
0
1

Consolidated Onboarding & Legacy User Migration (LUM) Process

Closed

starting from the request invite flow, the admin invite flow, the user invites users flow, user questionaire etc. we need "Complete your Profile" Message Complete your Profile make users aware of profile customisation. "You can customise your profile now or do it later." Migration -Emails, communication angle: "Claiming your unique username now is a smart move, though!" update Migration Dashboard http://localhost:3006/legacy/migration-status Migration Status Dashboard add email campaign features from http://localhost:3006/legacy/overdue to Migration Status Dashboard make sure legacy user are identified and are allowed to claim their legacy username and member status as a site tier. legacy user badge. member since remember legacy join date. so we can show on user profle , e.g. "Joined January 2013" we already have very elaborated migration process and legacy salon api on username/settings/migration this should evolve or sync with legacy user account claim process

#38 opened by SAL2 months ago
1
1

user signup flow. dont show questionaire when already answered

Closed

user is asked me for his interests on access request but then again when user clicks confirms link from email

#35 opened by SAL2 months ago
0
1

Admin Site Toolbar

Closed

Admin floating toolbar component - shows when an admin views any user's site

#34 opened by SAL2 months ago
0
1

Add a "Newsletter" block type

Closed

New block type with a simple email input + submit button Stores the Mailchimp list URL in block settings Posts directly to Mailchimp's form action URL (no API key needed) Gives you styling control that matches the site theme Requires: new block type in src/types/blocks.ts, renderer, editor UI

#32 opened by SAL3 months ago
1
1

Invite Flow Upgrade: Admin Direct Invite, Pre-Signup Questionnaire & Welcome

Closed

## Summary Upgrade the invite flow to remove friction for admins, pre-fill invited user details, collect artistic profile data during signup, and deliver a personalized welcome experience on first login. ## Current vs. Planned | | Current | Planned | |---|---|---| | Admin invite | 3 steps (request → approve → send email) | 1 step (enter email → done) | | Email on signup | User types it manually | Pre-filled and locked from invite | | Signup questions | None (email/username/password only) | + artistic practice, website, social link | | First dashboard visit | Generic empty state | Personalized welcome banner | --- ## A. Admin Direct Invite **New endpoint:** `POST /api/admin/invite` Accepts `{ email, firstName? }`. In one step: 1. Validates caller is admin 2. Creates `invite_requests` row with `status: approved`, `source: admin_direct`, `invited_by: admin_user_id` 3. Generates invite code 4. Sends invite email with link `/auth/signup?invite=CODE` The existing request → approve → send flow stays intact for organic signups. **Database changes:** ```sql ALTER TABLE invite_requests ADD COLUMN invited_by UUID REFERENCES user_profiles(id), ADD COLUMN source TEXT DEFAULT 'request'; -- Values: request, admin_direct, user_referral (future) ``` --- ## B. Pre-filled Email on Signup When an invited user clicks `/auth/signup?invite=CODE`, the email is pre-filled from the invite record. **New RPC function:** `get_invite_by_code(code)` — returns the invite row including email. **Signup page:** Fetches invite details server-side, passes `inviteEmail` to AuthForm. Email field rendered as read-only: "Invited as maria@example.com". **Security:** On submit, verify signup email matches the invite record email. --- ## C. Pre-Signup Questionnaire Two-step signup flow. Step 1: credentials (email, username, password → Continue). Step 2: three questions (→ Create Account). ### Question 1: Artistic Practice (required, multi-select chips) | | | | | |---|---|---|---| | Photography | Illustration | Painting | Graphic Design | | Architecture | Fashion | Film & Video | Sculpture | | Digital Art | Mixed Media | Typography | Animation | | Music | Writing | Crafts | Other | Selecting "Other" shows a freetext input. ### Question 2: Website Link (optional) Text input. Placeholder: `https://your-portfolio.com` ### Question 3: Social Link (optional) Text input. Placeholder: `https://instagram.com/yourusername` Platform auto-detected from URL (instagram.com → instagram field, twitter.com → twitter field, etc.) ### Data Flow Questionnaire answers stored in `user_metadata` during the `signUp()` call. After email verification, the auth callback syncs metadata to `user_profiles`: - `artistic_practice` → new `TEXT[]` column - website → existing `website` column - social link → parsed to appropriate social column **Database changes:** ```sql ALTER TABLE user_profiles ADD COLUMN artistic_practice TEXT[]; ``` --- ## D. Post-Signup Welcome After email verification, redirect to `/{username}/dashboard?welcome=true`. **New component:** `WelcomeBanner` — shows above the empty dashboard bento grid: - "Welcome to Salon.io, Maria!" - If artistic practice known: "We're thrilled to have a fellow photographer on board." - Dismiss button removes the `?welcome=true` param --- ## E. Terms of Service Acceptance Currently there is no ToS acceptance anywhere in the signup flow. This must be added before public launch (March 13). ### Placement The ToS checkbox goes on Step 2 (questionnaire), right above the "Create Account" button: ``` Step 2: About You ┌─────────────────────────────────────┐ │ What do you create? [chips...] │ │ Website link [________] │ │ Social link [________] │ │ │ │ ☐ I agree to the Terms of Service │ │ and Privacy Policy │ │ │ │ [Create Account] │ └─────────────────────────────────────┘ ``` - Checkbox is **unchecked by default** (GDPR requirement — no pre-checked consent) - "Create Account" button disabled until checkbox is checked - "Terms of Service" and "Privacy Policy" are links to `/terms` and `/privacy` - Not a pre-checked box — must be an affirmative action by the user ### What Gets Stored On signup, the acceptance timestamp is included in `user_metadata`: ```typescript options: { data: { username, artistic_practice: [...], tos_accepted_at: new Date().toISOString(), // ISO 8601 tos_version: "2026-03-13", // Version of ToS accepted } } ``` After email verification, synced to `user_profiles`: ```sql ALTER TABLE user_profiles ADD COLUMN tos_accepted_at TIMESTAMPTZ, ADD COLUMN tos_version TEXT; ``` ### Why This Moment The ToS acceptance happens before account creation — before the user receives any value (the 100 SLN signup bonus from the SLN Ledger spec is credited on email confirmation, which comes after). This sequence ensures: 1. User agrees to terms (Step 2, checkbox) 2. Account is created (Supabase signUp) 3. User verifies email (confirmation link) 4. SLN bonus credited (+100 SLN) 5. User lands on dashboard (welcome banner) Legal consent is captured before any credits, subscriptions, or platform features are accessible. ### Legal Requirements (EU/GDPR) | Requirement | How we meet it | |---|---| | Affirmative consent | Unchecked checkbox, user must click | | Informed consent | Links to full ToS and Privacy Policy | | Proof of consent | `tos_accepted_at` timestamp + `tos_version` stored | | Version tracking | `tos_version` field tracks which version was accepted | | Re-consent on changes | When ToS version changes, prompt existing users to re-accept | --- ## New Files | File | Purpose | |---|---| | `app/api/admin/invite/route.ts` | Admin direct invite endpoint | | `src/components/SignupQuestionnaire.tsx` | Questionnaire UI (chips + inputs) | | `src/components/dashboard/WelcomeBanner.tsx` | Personalized welcome banner | | `src/config/artistic-practices.ts` | Category list constant | | `src/utils/social-link-parser.ts` | Detect platform from URL | | `supabase/migrations/YYYYMMDD_invite_flow_upgrade.sql` | Schema + RPC changes | ## Modified Files | File | Change | |---|---| | `src/components/AuthForm.tsx` | Two-step flow, `inviteEmail` prop, questionnaire integration | | `app/auth/signup/page.tsx` | Server-side invite lookup, pass email | | `app/auth/callback/page.tsx` | Sync metadata to profile, `?welcome=true` redirect | | `src/hooks/use-auth.ts` | Extend `signUp()` with questionnaire metadata | | `src/components/dashboard/EmptyDashboard.tsx` | Integrate WelcomeBanner | --- ## Implementation Sequence 1. Database migration (columns + RPC) 2. Config and utilities 3. Admin invite API 4. Signup page (server-side invite lookup) 5. AuthForm two-step flow + SignupQuestionnaire 6. use-auth hook extension 7. Auth callback (profile sync + welcome redirect) 8. WelcomeBanner component 9. Email template updates *Full spec: `new-salon-app/docs/ongoing/INVITE-FLOW-UPGRADE.md`*

#30 opened by SAL3 months ago
0
1

Textblock Edit Panel Update

Closed

enhance the ui for the image block settings panel

#27 opened by Peter Langmacher3 months ago
0
1

[platform] Landing page overhaul

Closed

- Redesign hero with clearer value proposition for creative professionals - Showcase real user sites (pull from actual published sites) - Per-site pricing calculator with interactive slider - Migration CTA for legacy salon.io users - Mobile-first responsive design **Files:** `src/components/landing/NewSalonLanding.tsx`

#24 opened by SAL3 months ago
0
1

[editor] Refactor and polish Image + Text edit panels

Closed

- ImageEditPanel (62KB) extract into sub-components - TextEditPanel (70KB) extract into sub-components - Consistent UX: crop/resize, caption editing, alt text, formatting toolbar - Style preset picker more prominent in text panel - Cross-project section copy (user feedback) - Image opacity control (user feedback) **Files:** `src/components/editor/ImageEditPanel.tsx`, `src/components/editor/TextEditPanel.tsx`

#16 opened by SAL3 months ago
0
1

[billing] Stripe Tax + per-site tier enforcement

Closed

- Enable Stripe Tax for EU VAT compliance (needs EU OSS registration) - Update `tier-enforcement.ts` to read `websites.tier` instead of `user_profiles.tier` - Webhook handler to update `websites.tier` on subscription changes **Files:** `src/lib/tier-enforcement.ts`, `app/api/webhooks/stripe/route.ts`

#14 opened by SAL3 months ago
0
1

[billing] Redesign pricing page for per-site model

Closed

- Rewrite `PricingPage.tsx` with per-site calculator - "How many sites do you need?" slider showing monthly total - First site full price, additional sites at 50% - Lifetime Pro section: early bird 399 / regular 499, 2 Pro sites included **Files:** `src/components/landing/PricingPage.tsx`

#15 opened by SAL3 months ago
0
1

[editor/lightbox]

Closed

The Side panel open button is inbisible when the lightbox is open in edit mode. z-index issue

#11 opened by Peter Langmacher3 months ago
2
1

[layouts/canvas]

Closed

add option to have a horizontal scrolling canvas --- *Related doc: `layouts/canvas`*

#10 opened by SAL3 months ago
2
0

Drag-and-drop support for background image upload

Closed

Currently, background images can only be added via click-to-upload. Adding drag-and-drop functionality for background images would make the workflow much faster and more intuitive.

#55 opened by benjakon10 days ago
1
0

Support video content in layouts (e.g. embedded or linked videos)

Closed

Currently, it is only possible to integrate video content via external embeds (e.g. YouTube or Vimeo). There is no option to use video files directly within layouts. This limits the ability to include moving image content in a simple and flexible way. Suggested solution: Allow the use of video files directly within layouts, either via upload or by linking to external sources. Benefit: This would make it possible to integrate moving image content more easily and flexibly, enhancing the visual possibilities and overall design of a page. As motion content has become a standard element in modern web design, this feature would align the tool with common expectations and evolving design practices.

#51 opened by benjakon2 months ago
0
0

Display background image in Lightbox view

Closed

In the previous version of Salon, the background image was visible in Lightbox mode, which helped maintain the visual context of the page. Currently, when opening images in the Lightbox view, the background image is not displayed. While it is possible to adjust the background color, there is no option to display the background image in this mode. Suggested solution: Enable the background image to be displayed in the Lightbox view. Benefit: This would preserve the overall visual design and atmosphere when viewing images in Lightbox mode, creating a more consistent and immersive user experience.

#50 opened by benjakon2 months ago
0
0

Add eyedropper tool for picking colors from canvas

Closed

Currently, background colors can be selected using the built-in color picker (including hex input and predefined color options). However, it is not possible to pick a color directly from the canvas or from images within the workspace. This makes it difficult to match colors precisely when working with existing visual elements. Suggested solution: Add an eyedropper tool that allows users to sample colors directly from the canvas or uploaded images. Benefit: This would enable faster and more accurate color matching, improving design consistency and streamlining the workflow. It would also align the tool with standard functionality found in many design applications.

#49 opened by benjakon2 months ago
0
0

horizontal canvas in fixed height layout mode

Closed

In the previous version of Salon, it was possible to create and adjust horizontal canvases with groups of images in just a few simple steps. This was very convenient and the layout option I used most. In the new version of Salon, the horizontal canvas option is only available in canvas mode. While this works great for many cases, it can be unnecessarily time-consuming for many common use cases. For example, if I want to arrange a series of images (e.g. 20 images of the same size with consistent spacing) in a horizontal row, doing this in canvas mode requires a lot of manual work. Any changes (such as size, spacing, or order) also have to be adjusted manually and individually for each image. Suggested solution: Enable horizontal canvas in fixed height layout mode, with flexible options for sizing and spacing. Benefit: This would allow for quick and efficient creation and adjustment of consistent horizontal image rows, while avoiding the manual overhead required in canvas mode. It would significantly improve workflow efficiency for common horizontal layout tasks.

#48 opened by benjakon2 months ago
0
0

Canvas layout resets settings during use of horizontal scrolling

Closed

When using the Canvas layout in combination with horizontal scrolling, the page frequently resets partially after closing the editor or switching between edit and preview modes. This results in multiple layout settings being changed or lost without user input. Examples of affected settings include: - Background color - Horizontal / vertical orientation - Overall layout size - Layout position - Lightbox (enabled/disabled) - Section width and padding Expected behavior: All layout settings should persist consistently after switching modes or reopening the page. Actual behavior: Various layout settings reset randomly, causing loss of work and requiring repeated adjustments. Impact: This is a critical issue, especially for complex layouts, as it can result in significant time loss and repeated manual reconfiguration.

#45 opened by benjakon2 months ago
0
0

Background image scales incorrectly in "Variable Size" layout

Closed

When using the "Variable Size" layout option, the background image is displayed at a much larger scale than intended. The same background image behaves correctly in all other layout options, where it keeps the selected size. The issue only occurs when "Variable Size" is enabled.

#44 opened by benjakon2 months ago
0
0

Mobile Optimisation and Device Preview

Closed

we need a total reality check and overhaul of mobile and device preview. both are pretty much broken now whats expected is that when a user selects mobile device preview, a special panel in sidebar opens, with 3 main tabs section, navigation, style for every section the user should be able to select alternative layout type for mobile. note, that the user should not be able to edit content when in mobile preview mode, but only change/optimise a subset of settings for mobile display

#31 opened by SAL3 months ago
1
0

[editor] Color picker overhaul - recent colors, smart suggestions

Closed

- Unified color picker behavior across all panels (text, backgrounds, navigation, theme) - Always show: recent colors (last 8 used), theme colors, standard presets - Compact mode for inline use, expanded mode for detailed editing - Smart suggestions: complementary colors from site theme, high-contrast options against background **Files:** `src/components/ui/color-picker.tsx`

#18 opened by SAL3 months ago
0
0

[layouts/slideshow]

Closed

slideshow does not advance in autoplay mode. slideshows only advances on hover --- *Related doc: `layouts/slideshow`*

#12 opened by SAL3 months ago
1
0

Duplicate and Save Sections

Closed

Allow users to duplicate and save sections for re-use. Should provide customizable copy options: - Full copy with layout, styles, images, video, and text - Template copy with placeholders for images, video, and text - Duplicate on same page - Duplicate on different page - Duplicate on new page - Save as template

#9 opened by pew455 months ago
0
0

Header is not sticky

Closed

When i change settings, the sticker header setting is not respected. always unsticky.

#1 opened by Peter Langmacher6 months ago
0