--- url: /guide/introduction.md description: >- Monolith is a shadcn-style theme for Filament v4 and v5 with light, dark and RTL, any font, and a live appearance customizer. --- # Introduction Monolith is a shadcn-style theme for Filament v4 and v5. Quiet surfaces, tight typography, first-class light, dark and RTL, any font, and a live appearance customizer your users can tune without a rebuild. ## What's included * Inset, floating and classic sidebars; compact, default and roomy density. * 10 accents plus any brand hex color, and 8 base palettes. * Any Bunny font with an in-panel font picker, or self-hosted fonts. * Split sign-in pages with filament-socialite styling. * Translations for all 64 locales Filament ships, with Arabic and RTL support. * A live appearance customizer with config export and per-user server persistence. * A command palette on ⌘K / Ctrl K, sticky row actions and themed Chart.js widgets. | | | | --- | --- | | ![Floating sidebar, dark](/images/orders-floating-dark.webp) | ![Classic sidebar, compact](/images/orders-classic-compact.webp) | | ![Slide-over](/images/slide-over.webp) | ![Mobile](/images/dashboard-mobile.webp) | ## Accessibility * WCAG 2.2 AA contrast for text, badges and muted copy in light and dark, checked with axe-core across panel pages, the customizer and dropdowns. * Every control has a visible focus ring; inputs use a soft ring so focus is clear without shouting. * The customizer is a modal dialog with a focus trap, Escape to close, and focus returned to the trigger. Option groups are radio groups with a single tab stop and arrow-key navigation (mirrored in RTL); the font search is an ARIA combobox. * Pointer targets such as select clear buttons are at least 24×24px. * `prefers-reduced-motion` turns off transitions, skeleton shimmer and entrance animations. ## Loading behaviour Appearance applies from an inline head script before first paint: no flash of the default theme, no sidebar jump. Widget skeletons remember each widget's last height so lazy widgets don't shift the page. ## Requirements Filament v4 or v5. Works with or without a custom Filament theme. --- --- url: /guide/installation.md description: >- Install Monolith from its private Composer repository with your licence key and register it on a Filament panel. --- # Installation Monolith is served from a private Composer repository. Use the email you bought with and the licence key from your purchase email. ## Add the repository ```bash composer config repositories.monolith composer https://packages.hoceine.com ``` ## Add your licence ```bash composer config http-basic.packages.hoceine.com you@example.com YOUR-LICENCE-KEY ``` This writes to the project's `auth.json`. Keep that file out of git, or add `--global` to store the credentials once for every project on your machine. ## Require the package ```bash composer require hoceineel/filament-monolith ``` ## Publish the assets ```bash php artisan filament:assets ``` ## Register the plugin ```php use HoceineEl\Monolith\MonolithTheme; $panel->plugin(MonolithTheme::make()); ``` Monolith sets the panel's colors and font, so drop any `->colors()` / `->font()` calls you want it to own. See [Quick Start](/guide/quick-start). ## Deploying Servers and CI need the same credentials. Either commit nothing and set them per environment: ```bash composer config --global http-basic.packages.hoceine.com you@example.com YOUR-LICENCE-KEY ``` or provide them as JSON in the `COMPOSER_AUTH` environment variable: ```bash COMPOSER_AUTH='{"http-basic":{"packages.hoceine.com":{"username":"you@example.com","password":"YOUR-LICENCE-KEY"}}}' ``` ## Updates Your licence includes updates for its update window. Releases published after the window ends stay hidden until you renew; versions you already have keep installing. ## Custom Filament themes Works with or without a custom Filament theme (`php artisan make:filament-theme`). If another plugin asks you to add `@source` lines, add them to your custom theme as usual. Monolith's stylesheet sits in its own cascade layer and keeps working on top. --- --- url: /guide/quick-start.md description: >- Register Monolith on a Filament panel and set its sidebar, density, radius, accent, base color, font and badges. --- # Quick Start After [installing](/guide/installation), register the plugin on a panel: ```php use HoceineEl\Monolith\MonolithTheme; $panel->plugin(MonolithTheme::make()); ``` Then tune the look in one chain: ```php use HoceineEl\Monolith\Enums\{Accent, BadgeStyle, BaseColor, Font, Radius}; MonolithTheme::make() ->floatingSidebar() ->compact() ->radius(Radius::Large) ->accent(Accent::Violet) ->base(BaseColor::Slate) ->font(Font::Inter) ->badges(BadgeStyle::Outline) ->sidebarWidth('17rem'); ``` Not sure what you want? Open the [customizer](/guide/customizer) from the topbar, design the look in the browser, and press **Copy config** to get the matching `MonolithTheme::make()` chain. ![Appearance customizer](/images/customizer.webp) Next: [Look](/guide/look), [Sign-in Pages](/guide/sign-in), [Configuration](/reference/configuration). --- --- url: /guide/look.md description: >- Set Monolith's sidebar style, density, radius, accent, base color, fonts and badge style, statically or per tenant. --- # Look ```php use HoceineEl\Monolith\Enums\{Accent, BadgeStyle, BaseColor, Font, Radius}; MonolithTheme::make() ->floatingSidebar() // insetSidebar() (default), classicSidebar() ->compact() // comfortable(), density(Density::Default) ->radius(Radius::Large) // None, Small, Medium, Large, ExtraLarge ->accent(Accent::Violet) // 10 accents, a hex brand color, or a Filament palette ->base(BaseColor::Slate) // Neutral, Zinc, Slate, Gray, Stone, Mauve, Olive, Sage ->font(Font::Inter) // or any Bunny Fonts family name ->badges(BadgeStyle::Outline) // Soft, Outline, Solid ->sidebarWidth('17rem'); ``` ## Sidebars Three styles: inset (default), floating and classic. | | | | --- | --- | | ![Inset sidebar](/images/orders-inset.webp) | ![Floating sidebar, dark](/images/orders-floating-dark.webp) | | ![Classic sidebar, compact](/images/orders-classic-compact.webp) | ![Collapsed sidebar](/images/dashboard-collapsed.webp) | ## Density `compact()`, `comfortable()`, or `density(Density::Default)`. ## Radius `Radius::None`, `Small`, `Medium`, `Large` or `ExtraLarge`. ## Brand colors ```php ->accent('#0f766e') // any hex; text on primary buttons picks black or white for contrast ->accent(Color::Teal) // any Filament color palette ``` | | | | --- | --- | | ![Emerald accent](/images/products-emerald.webp) | ![Indigo accent](/images/projects-indigo.webp) | | ![Teal, dark](/images/employees-teal-dark.webp) | ![Rose, classic, dark](/images/orders-rose-classic-dark.webp) | ## Base colors `Neutral`, `Zinc`, `Slate`, `Gray`, `Stone`, `Mauve`, `Olive` or `Sage`. ## Fonts ```php ->font('Plus Jakarta Sans') // any family on fonts.bunny.net ->font('Inter', provider: GoogleFontProvider::class) // any Filament font provider ->fonts([Font::Geist, 'Manrope', 'Tajawal']) // the shortlist shown in the customizer ->fontPicker(false) // hide the "search 1,900+ fonts" picker ->fallbackFonts(['Noto Sans Hebrew']) // per-glyph fallbacks after the main font ``` The customizer's picker searches the full Bunny Fonts catalog, previews each family in its own face, and can filter to fonts with Arabic support. ### Self-hosted fonts For privacy-strict or offline apps, serve fonts yourself. Monolith then loads nothing from third parties and hides the catalog picker: ```php ->fontUrl('/fonts/{slug}.css') // placeholders: {slug}, {family}, {weights} ->fontUrl('https://fonts.googleapis.com/css2?family={family}:wght@400;500;600;700&display=swap') ``` `{slug}` is the kebab-case family (`plus-jakarta-sans`), `{family}` is URL-encoded, `{weights}` is `400,500,600,700` (or `500` for customizer previews). ## Badges `BadgeStyle::Soft`, `Outline` or `Solid`. ## Dynamic, per-tenant theming Every look option accepts a closure, evaluated per request with Filament's dependency injection: ```php MonolithTheme::make() ->accent(fn () => filament()->getTenant()?->brand_color ?? Accent::Blue) ->sidebar(fn () => auth()->user()?->prefers_floating ? SidebarStyle::Floating : SidebarStyle::Inset) ->customizer(fn () => auth()->user()?->is_admin) ->tokens(fn () => ['--mn-radius' => filament()->getTenant()?->radius ?? '0.625rem']); ``` --- --- url: /guide/customizer.md description: >- Let users change Monolith's mode, sidebar, accent, base color, radius, density, font and badges live, and store choices per user. --- # Customizer Users change mode, sidebar, accent, base color, radius, density, font, badges and behaviour from the topbar swatch button or the user menu. **Copy config** exports the matching `MonolithTheme::make()` chain, so a look designed in the browser can be committed as the panel default. ## Restricting choices ```php use HoceineEl\Monolith\Enums\CustomizerSection; ->customizer(false) // lock the look to your config ->customizerSections([CustomizerSection::Mode, CustomizerSection::Accent]) // only these can change ->accents([Accent::Blue, Accent::Emerald]) // restrict the swatches ->baseColors([BaseColor::Zinc, BaseColor::Slate]) ``` Values for hidden sections are ignored, even if a browser stored them earlier. ## Remembering choices across devices By default choices are saved in the browser. To store them per user: ```php ->persistAppearanceOnUser() // json column `monolith_appearance` on the users table ->persistAppearanceOnUser('ui_preferences') // or any json column ``` Publish and run the migration for the default column. An `array` cast is optional: ```bash php artisan vendor:publish --tag=monolith-migrations php artisan migrate ``` Or bring your own storage: ```php ->persistAppearanceUsing( load: fn (?Authenticatable $user): array => Cache::get("appearance.{$user?->getKey()}", []), save: fn (array $appearance, ?Authenticatable $user) => Cache::forever("appearance.{$user?->getKey()}", $appearance), ) ``` Monolith registers an authenticated panel route (`monolith.appearance`) that only accepts keys the customizer allows. ## JavaScript API ```js Monolith.read() // current appearance Monolith.save({ ...Monolith.read(), accent: 'rose' }) Monolith.loadFont('Fraunces') ``` --- --- url: /guide/sign-in.md description: >- Turn Filament's login, registration and password reset pages into a two-column card with a photo, and style filament-socialite buttons. --- # Sign-in Pages ```php MonolithTheme::make() ->splitAuth() // ships with a Dutch floral still life ->splitAuth(image: asset('images/sign-in.jpg')) // or your own ->splitAuth(heading: 'Every order, one calm workspace.', description: 'Track stock and ship faster.') ->splitAuth(links: ['Terms' => route('terms'), 'Privacy' => route('privacy')]) ``` Login, registration and password reset pages become a two-column card: your brand at the top of the form column, a copyright line and optional links at the bottom, and a full-height photo on the other side. The heading and description sit over the photo with a scrim for contrast. Below 1024px the photo becomes a banner above the form. Signed-in pages such as email verification keep the regular card. Columns mirror in RTL, and the entrance animation is skipped under `prefers-reduced-motion`. | | | | --- | --- | | ![Registration](/images/register.webp) | ![Mobile sign-in](/images/login-mobile.webp) | ## Social login Social login buttons from [filament-socialite](https://github.com/DutchCodingCompany/filament-socialite) are styled to match, and the "sign up" / "sign in" link moves below them. ## Default image The default image is *Flowers in a Metal Vase* by Abraham Mignon (c. 1670, Mauritshuis, The Hague), a public domain work. --- --- url: /guide/rtl.md description: >- Monolith is tested in RTL across every page and loads Arabic-capable fonts for Arabic-script locales. --- # Arabic & RTL Monolith is tested in RTL across every page, modal, slide-over, dropdown and sidebar style. ![Dashboard in Arabic](/images/dashboard-rtl.webp) When the app locale is Arabic-script (`ar`, `fa`, `ur`, …): * IBM Plex Sans Arabic loads as a fallback, so Latin text keeps your main font while Arabic gets a matching sans. * The customizer adds IBM Plex Sans Arabic, Tajawal and Cairo to the font list and filters the picker to Arabic-capable fonts. Override with `->fallbackFonts([...])` or `->fonts([...])`. | | | | --- | --- | | ![Customers, RTL](/images/customers-rtl.webp) | ![Customizer, RTL](/images/customizer-rtl.webp) | | ![Sign-in, RTL](/images/login-rtl.webp) | | The sidebar toggle uses a panel icon that mirrors in RTL, and the customizer's arrow-key navigation is mirrored too. See [Translations](/reference/translations). --- --- url: /reference/configuration.md description: Monolith feature toggles, their defaults, and how to override its panel icons. --- # Configuration Every option is a method on `MonolithTheme::make()`. For the look, see [Look](/guide/look); for the customizer, see [Customizer](/guide/customizer). ## Features | Method | Default | What it does | | --- | --- | --- | | `commandPalette()` | on | Global search on ⌘K / Ctrl K with a key hint. | | `userMenuInSidebar()` | on | User menu in the sidebar footer. | | `sidebarCollapsible()` | on | Collapse the desktop sidebar to an icon rail with tooltips. | | `topbarBreadcrumbs()` | on | Breadcrumbs in the topbar instead of above the heading. | | `brandMonogram()` | on | Brand initials tile when the panel has no logo (also in the mobile topbar). | | `connectedNavigation()` | off | The active sidebar item joins the page canvas like a tab. | | `stickyActions()` | on | Row actions stay pinned while wide tables scroll. | | `chartStyling()` | on | Smooth lines, gradient fills and themed tooltips for Chart.js widgets. | | `configurePanelColors()` | on | Set Filament's `primary` / `gray` palettes from the accent and base. | ![Command palette](/images/search.webp) ## Icons The user and tenant menus use an up-down chevron, and the sidebar toggle uses a panel icon that mirrors in RTL. Override any of them with `$panel->icons([...])` after registering the plugin, using `PanelsIconAlias::USER_MENU_TOGGLE_BUTTON`, `TENANT_MENU_TOGGLE_BUTTON`, `SIDEBAR_COLLAPSE_BUTTON`, `SIDEBAR_EXPAND_BUTTON`, `TOPBAR_OPEN_SIDEBAR_BUTTON` or `TOPBAR_CLOSE_SIDEBAR_BUTTON`. ![User menu](/images/user-menu.webp) --- --- url: /reference/tokens.md description: >- Override Monolith's --mn-* design tokens from PHP and point other plugins at its palettes. --- # Design Tokens Override any `--mn-*` token without building CSS: ```php ->tokens([ '--mn-radius' => '0.5rem', '--mn-sidebar' => 'oklch(0.98 0.01 250)', '--mn-chart-2' => '#0ea5e9', ]) ``` Common tokens: `--mn-radius`, `--mn-bg`, `--mn-card`, `--mn-muted`, `--mn-border`, `--mn-sidebar`, `--mn-primary`, `--mn-primary-fg`, `--mn-ring`, `--mn-chart-1` to `--mn-chart-5`, `--mn-control-h`, `--mn-cell-py`, `--mn-page-px`, `--mn-gutter`. `tokens()` also accepts a closure, evaluated per request. See [per-tenant theming](/guide/look#dynamic-per-tenant-theming). ## Matching other plugins Monolith sets Filament's `primary` and `gray` palettes, so anything reading `--primary-*` / `--gray-*` follows the accent. Point plugins with their own color variables at them: ```css :root { --fio-theme-accent: var(--primary-600); } ``` --- --- url: /reference/translations.md description: >- Monolith ships translations for all 64 locales Filament supports, with an English fallback. --- # Translations Monolith ships translations for all 64 locales Filament supports; any other locale falls back to English, even when the app's fallback locale is not `en`. Publish them to translate or reword: ```bash php artisan vendor:publish --tag=monolith-translations ``` For Arabic-script locales, see [Arabic & RTL](/guide/rtl). --- --- url: /changelog.md description: >- Monolith changelog: release notes for every version, listing added features, changes and fixes. --- # Changelog All notable changes to `filament-monolith` are documented in this file. ## v1.1.0 - 2026-10-13 * `splitAuth()` turns the sign-in pages into a two-column card with a photo, an optional heading and description, and a public domain floral still life by Abraham Mignon by default, plus a brand mark, copyright line, optional footer links and filament-socialite styling. * Monolith is now commercial software, installed from a private Composer repository. * The user and tenant menus show an up-down chevron, like the Laravel starter kits. * The sidebar toggle uses a panel icon instead of the hamburger and chevrons, mirrored in RTL. * Translations for all 64 locales Filament ships (French, Spanish, German, Chinese, Japanese, Persian and more). * Locales Monolith doesn't ship fall back to English, even when the app's fallback locale isn't `en`. * `persistAppearanceOnUser()` no longer throws under `Model::shouldBeStrict()` when the column wasn't loaded, and works on a json column without an `array` cast. * Publishable migration for the `monolith_appearance` column (`--tag=monolith-migrations`). * The customizer says choices save to the account when they are stored on the server. ## v1.0.2 - 2026-10-09 * French translations for the appearance customizer. ## v1.0.1 - 2026-10-08 * Gray badges are styled, and the sidebar keeps its collapsed state across navigation. ## v1.0.0 - 2026-10-08 * Initial release: inset, floating and classic sidebars; compact, default and roomy density; 10 accents plus any brand hex color; 8 base palettes; any Bunny font with an in-panel font picker; Arabic and RTL support; live appearance customizer with config export; per-user server persistence; Filament v4 and v5 support. --- --- url: /pricing.md description: >- Monolith pricing. One-time purchase, perpetual use. Single project $29, Studio $79, Agency $199 with lifetime updates. 14-day money-back guarantee. --- # Monolith pricing One-time payment, perpetual use. Every tier is the same software with no feature gates; tiers differ only in how many production projects the licence covers and how long new versions can be downloaded. Prices are in USD and exclude sales tax or VAT. | Plan | Price | Production projects | Updates | Renewal | | --- | --- | --- | --- | --- | | Single project | $29 | 1 | 12 months | Optional, $19 | | Studio | $79 | Up to 5 (yours or your clients') | 24 months | Optional, $49 | | Agency | $199 | Unlimited, including every tenant of a SaaS | Lifetime | Never | Local and staging environments never count toward the project total. Buy on this page with Paddle, our merchant of record (invoices show our registered company, Wiser Pocket); the licence key arrives by email with install instructions. ## FAQ * **What happens when the update window ends?** Nothing breaks. The last version you installed keeps running forever. Renewing only buys another window of new releases. * **How are project counts enforced?** They are licence terms, not a runtime limit. The package never contacts a server and never blocks a site. * **Is the source included?** Yes. Your key authenticates `composer require hoceineel/filament-monolith` from `packages.hoceine.com`, and the full source lands in `vendor/`. * **Which versions are supported?** Filament 4 and 5, Laravel 11, 12 or 13, PHP 8.3+. * **Refunds?** 14-day money-back guarantee, no questions asked: email hello@hoceine.com or use paddle.net. See the [Refund Policy](/legal/refund-policy). * **Is there a trial?** No time-limited key, but the 14-day refund window lets you try the whole theme at no risk. --- --- url: /legal/privacy.md description: >- Monolith privacy policy: what purchase and license data we collect via Paddle, registry logs, no telemetry or analytics, and your rights. --- # Privacy Policy *Last updated: October 10, 2026* This policy explains what data **Monolith** (operated by **Wiser Pocket**, owner: Hoceine EL IDRISSI) collects and how it is used. ## What we collect **When you purchase a license**, our merchant of record **Paddle.com Market Ltd.** processes your payment. Paddle collects your name, email address, country, and payment details under its own [privacy policy](https://www.paddle.com/legal/privacy). We never see or store your card details. From Paddle we receive and store only what we need to deliver the product: * your **email address** and name, * the product/tier purchased and the transaction identifier, * the **license key** we generate for you. **When you install the package**, our registry (`packages.hoceine.com`) receives your license key and email (as Composer HTTP-basic credentials) plus standard web server logs (IP address, user agent, requested version). We use this solely to authenticate downloads and operate the service. **This documentation site** is a static site. It does not set cookies and does not run third-party analytics. **On the pricing page and in checkout**, we count anonymous funnel steps (page viewed, plan clicked, checkout opened, email entered, payment chosen, purchase completed or checkout closed) to see where buyers drop off. Each browser tab gets a random id that lives only for that tab; no cookies are set, and no IP address, email or name is stored with these counts, which are deleted after 180 days. If your browser sends a Global Privacy Control or Do Not Track signal, nothing is counted. ## What we don't do * We don't sell or rent your data to anyone. * We don't send marketing email — license and service emails only (e.g. your key, important security notices). * We don't collect telemetry from the Software itself: Monolith runs entirely inside your own application and phones nothing home. ## Data retention & your rights We keep purchase and license records for as long as your license is active and as required for accounting. You can ask us at any time to access, correct, or delete the personal data we hold about you by emailing **hello@hoceine.com**. Deleting your data deactivates your license, since we can no longer authenticate it. ## Third parties we rely on * **Paddle** — payments, invoices, tax (merchant of record) * **Hetzner / Laravel Forge** — hosting of the package registry, this website and the demo * **LWS** — DNS for hoceine.com ## Contact Privacy questions: **hello@hoceine.com**. --- --- url: /legal/refund-policy.md description: >- Monolith refund policy: a 14-day money-back guarantee, no questions asked. Request by email or Paddle; the license key is then deactivated. --- # Refund Policy *Last updated: October 10, 2026* We want you to be happy with Monolith. ## 14-day money-back guarantee If Monolith isn't a fit, contact us within **14 days of purchase** and we'll refund your order in full — no questions asked. ## How to request a refund Either of the following works: 1. Email **hello@hoceine.com** from the address you used at checkout, including your order number or license key; or 2. Contact **Paddle**, our merchant of record, directly via [paddle.net](https://paddle.net) using the receipt they emailed you. Refunds are processed by Paddle back to your original payment method, typically within 5–10 business days depending on your bank. ## After a refund When an order is refunded, the associated license key is deactivated and access to the package registry for that key ends. Software already installed must no longer be used in production. ## Late requests Requests after the 14-day window are handled case by case — write to us and we'll do our best to find a fair outcome. --- --- url: /legal/terms.md description: >- Monolith terms and conditions: Paddle as merchant of record, one-time Single, Studio and Agency licenses, updates, support and liability. --- # Terms & Conditions *Last updated: October 10, 2026* These Terms & Conditions ("Terms") govern the purchase and use of **Monolith**, a commercial software package for the Filament admin panel framework that restyles Filament panels as a theme ("the Software"), sold by **Wiser Pocket** (owner: Hoceine EL IDRISSI), operating the Monolith product ("we", "us"). By purchasing or using the Software you agree to these Terms. ## 1. Merchant of record Orders are processed by our online reseller and merchant of record, **Paddle.com Market Ltd.** ("Paddle"). Paddle handles payment processing, billing inquiries, invoices, sales tax/VAT, and customer payment data. Paddle's [Terms of Use](https://www.paddle.com/legal/checkout-buyer-terms) apply to every purchase in addition to these Terms. ## 2. The product Monolith is a developer tool distributed as a Composer package from our private package registry (`packages.hoceine.com`). After purchase you receive a **license key** by email, which authenticates package installation and updates. ## 3. Licenses All licenses are **one-time purchases** that grant a perpetual, non-exclusive, non-transferable right to use the version(s) of the Software released during your update window: * **Single project** — use of the Software in **one** production project (one root domain or application), plus unlimited local/staging environments for that project. Includes **12 months** of updates. * **Studio** — use of the Software in up to **five** production projects owned by you or built by you for your clients, plus unlimited local/staging environments for those projects. Includes **24 months** of updates. * **Agency** — use of the Software in **any number** of production projects owned by you or built by you for your clients. Includes **lifetime updates**: the update window never ends and there is nothing to renew. The update window runs from the date of purchase and covers updates and bug fixes. After it ends, the Software keeps working — the licence is perpetual, nothing is disabled and no attribution is added — you simply stop receiving versions released after that date until you renew. Renewal is optional and adds another window of the same length; it never changes your license key. You may **not**: redistribute, resell, sublicense, or publish the Software's source code; share your license key publicly; or use the Software to build a product whose primary purpose is to compete with Monolith. ## 4. Delivery Delivery is electronic and immediate: your license key and installation instructions are emailed to the address used at checkout, normally within minutes of payment. No physical goods are shipped. ## 5. Refunds See our [Refund Policy](/legal/refund-policy). In short: 14 days, no questions asked, processed by Paddle. ## 6. Support We provide reasonable email support for installation and bug reports during your update window. Support does not include building your application for you, custom development, or consulting. ## 7. Disclaimer & limitation of liability The Software is provided **"as is"**, without warranty of any kind, express or implied, including merchantability or fitness for a particular purpose. To the maximum extent permitted by law, our total liability arising out of these Terms or your use of the Software shall not exceed the amount you paid for your license. We are not liable for indirect, incidental, or consequential damages, or for loss of data, profits, or revenue. ## 8. Changes We may update these Terms from time to time. The version published on this page at the time of your purchase applies to that purchase. ## 9. Contact Questions about these Terms: **hello@hoceine.com**. Billing questions can also be directed to Paddle via [paddle.net](https://paddle.net).