Add a celebratory experience when users join or create an organization:
- Add canvas-confetti dependency for visual effects
- Store organization name in localStorage after successful join/create
- Display celebration dialog with confetti animation on ProfilePage
- Clear the celebration flag after showing to prevent repeat displays
Add localStorage persistence for the currently selected organization.
This ensures the user's organization selection is remembered across
browser sessions, improving user experience by maintaining context
after page reloads or revisiting the application.
Add validation in OrganizationService to check if the member being
removed is the last owner of an organization. If so, raise a ValueError
to prevent accidental loss of ownership. The API layer catches this
exception and returns a 403 error with appropriate message.
- Add CreateOrgDialog component with name/slug form and auto-slug generation
- Add "New Organisation" button in TopBar org dropdown (limited to 10 orgs)
- Fix admin check in AppSidebar to use currently selected org role
instead of global isOrgAdmin flag for proper org-scoped permissions
Extract social login buttons (Passkey, Google, GitHub, Microsoft) from
LoginPage into a dedicated SocialLoginButtons component. This enables
reuse in OIDCLoginPage and improves code maintainability.
- Add contact API endpoint for demo requests and sales enquiries
- Implement functional contact forms on Demo and Pricing pages with honeypot spam protection
- Update footer layout: remove Company section, add contact email
- Update self-hosted FAQ to mention open source with GitHub links
- Add vitest and testing-library dependencies
- Add tests for MarketingLayout and PricingPage components
- Remove placeholder external-auth test file
Extract user management functionality from MembersPage drawer into a
dedicated UserManagementPage at /org/members/:userId. The new page
provides a full-page interface with tabs for user details, security
settings (MFA methods), and access management (OAuth accounts, SSH keys).
This improves code organization by separating concerns and provides
better UX for user administration tasks.
Replace remaining SECUIRD_API reference with config.api.baseUrl in
LoginPage.tsx. This fixes the 'SECUIRD_API is not defined' error
when accessing /login?cli_token=... during CLI authentication flow.
Replace inline SECUIRD_API constant definitions with imported config
module across all auth pages. This consolidates API URL configuration
into a single source of truth.
Simplify OAuth login and account linking by removing the redirect_uri
parameter from initiateLogin and initiateLink functions. The backend
now handles callback URL construction internally.
Add comprehensive marketing content for ZeroTier Network Governance feature
including a dedicated landing page, navigation updates, and feature highlights
across the homepage and features page.
- Add new ZeroTierPage with feature documentation and use cases
- Add ZeroTier to navigation in MarketingLayout header and footer
- Update HomePage hero headline and add ZeroTier feature section
- Add ZeroTier features section to FeaturesPage
- Add ScrollToTop component for better navigation UX
- Move ApiDevTools to AuthenticatedLayout (dev mode only)
- Add SSR tests for marketing pages
- Update SSHCertificatesPage comparison table for clarity
- Add documentation link to MarketingLayout footer
Add signUrl property to config for CLI sign URL without /api/v1 suffix.
Update CLIGuidePage to use config.signUrl instead of hardcoded URL.
Update .env.example and add .swarm/ to .gitignore.
Add comprehensive marketing website with landing page, features, pricing,
demo, SSH certificates, and security pages. Update index.html with enhanced
SEO metadata, Open Graph tags, and structured data for the Secuird brand.
Add comprehensive ZeroTier integration and access control:
- NetworksPage for managing ZeroTier portal networks
- DevicesPage for device registration and membership management
- AccessPage for approval workflows, session management, and kill switch
- Complete API client with TypeScript types for ZeroTier entities
- Navigation updates with ZeroTier section in sidebar
Added OIDC Web Page Flow
Admin can add/reset password
Admin can remove users'/members mfa/2fa, unlink account from oauth provider
Chore: Text changes (Forgot Pass, CA)
Add ensureValidRpId helper to validate and correct rp.id for WebAuthn
operations, preventing authentication failures when the configured rp.id
doesn't match the current hostname. Also add OAuthProvider type and fix
type casting in LoginPage.