create-snapify-app 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +24 -0
- package/README.md +55 -2
- package/bin/create-snapify-app.mjs +174 -0
- package/lib/args.mjs +59 -0
- package/lib/copy.mjs +44 -0
- package/lib/env.mjs +84 -0
- package/lib/prompt.mjs +63 -0
- package/package.json +33 -4
- package/template/.env.example +79 -0
- package/template/.github/workflows/ci.yml +23 -0
- package/template/.github/workflows/deploy.yml +26 -0
- package/template/.github/workflows/ping.yml +8 -0
- package/template/.github/workflows/release.yml +67 -0
- package/template/.snapify-install.json +5 -0
- package/template/CHANGELOG.md +28 -0
- package/template/LICENSE +14 -0
- package/template/README.md +287 -0
- package/template/administrator.html +23 -0
- package/template/apps/client/src/App.tsx +765 -0
- package/template/apps/client/src/auth.css +400 -0
- package/template/apps/client/src/lib/api.ts +22 -0
- package/template/apps/client/src/main.tsx +20 -0
- package/template/apps/community/src/App.tsx +592 -0
- package/template/apps/community/src/main.tsx +20 -0
- package/template/apps/community/src/styles.css +24 -0
- package/template/apps/developers/src/App.tsx +643 -0
- package/template/apps/developers/src/main.tsx +17 -0
- package/template/apps/developers/src/pages.tsx +1587 -0
- package/template/apps/developers/src/styles.css +98 -0
- package/template/apps/developers/src/ui.tsx +179 -0
- package/template/apps/landing/src/App.tsx +598 -0
- package/template/apps/landing/src/LegalPages.tsx +158 -0
- package/template/apps/landing/src/OrderPage.tsx +381 -0
- package/template/apps/landing/src/SeoPages.tsx +923 -0
- package/template/apps/landing/src/copy.ts +195 -0
- package/template/apps/landing/src/main.tsx +20 -0
- package/template/apps/landing/src/styles.css +803 -0
- package/template/apps/landing/src/types.ts +19 -0
- package/template/apps/marketplace/src/App.tsx +1229 -0
- package/template/apps/marketplace/src/developer/DeveloperApp.tsx +1266 -0
- package/template/apps/marketplace/src/main.tsx +20 -0
- package/template/apps/marketplace/src/styles.css +1001 -0
- package/template/apps/shared/AuthContext.tsx +65 -0
- package/template/apps/shared/Logo.tsx +33 -0
- package/template/apps/shared/api.ts +47 -0
- package/template/apps/shared/ui.tsx +128 -0
- package/template/apps/superadmin/src/App.tsx +1264 -0
- package/template/apps/superadmin/src/lib/api.ts +20 -0
- package/template/apps/superadmin/src/lib/hooks.ts +20 -0
- package/template/apps/superadmin/src/main.tsx +16 -0
- package/template/apps/superadmin/src/pages/ClientsPage.tsx +185 -0
- package/template/apps/superadmin/src/pages/InvoicesPage.tsx +157 -0
- package/template/apps/superadmin/src/pages/NewsletterPage.tsx +212 -0
- package/template/apps/superadmin/src/pages/OrdersPage.tsx +195 -0
- package/template/apps/superadmin/src/pages/PaymentsPage.tsx +150 -0
- package/template/apps/superadmin/src/pages/PayoutsPage.tsx +133 -0
- package/template/apps/superadmin/src/pages/PublishersPage.tsx +151 -0
- package/template/apps/superadmin/src/pages/SeoControlPage.tsx +692 -0
- package/template/apps/superadmin/src/pages/SettingsPage.tsx +199 -0
- package/template/apps/superadmin/src/pages/SystemPage.tsx +109 -0
- package/template/apps/superadmin/src/pages/TicketsPage.tsx +201 -0
- package/template/apps/superadmin/src/pages/UsersPage.tsx +167 -0
- package/template/client.html +21 -0
- package/template/community/hamdiayari/akhbar/README.md +23 -0
- package/template/community/hamdiayari/akhbar/screenshot.jpg +0 -0
- package/template/community/hamdiayari/akhbar/snapify.theme.json +76 -0
- package/template/community/hamdiayari/akhbar/src/Brand.tsx +26 -0
- package/template/community/hamdiayari/akhbar/src/Footer.tsx +182 -0
- package/template/community/hamdiayari/akhbar/src/Header.tsx +191 -0
- package/template/community/hamdiayari/akhbar/src/Layout.tsx +49 -0
- package/template/community/hamdiayari/akhbar/src/Social.tsx +33 -0
- package/template/community/hamdiayari/akhbar/src/Ticker.tsx +86 -0
- package/template/community/hamdiayari/akhbar/src/Views.tsx +285 -0
- package/template/community/hamdiayari/akhbar/src/blocks/CollectionBlocks.tsx +672 -0
- package/template/community/hamdiayari/akhbar/src/blocks/ContentBlocks.tsx +305 -0
- package/template/community/hamdiayari/akhbar/src/blocks/ConversionBlocks.tsx +569 -0
- package/template/community/hamdiayari/akhbar/src/blocks/HeaderBlocks.tsx +287 -0
- package/template/community/hamdiayari/akhbar/src/index.tsx +51 -0
- package/template/community/hamdiayari/akhbar/src/kit.tsx +357 -0
- package/template/community/hamdiayari/akhbar/src/site.ts +96 -0
- package/template/community/hamdiayari/akhbar/src/styles.css +566 -0
- package/template/community/hamdiayari/akhbar-actualites/README.md +28 -0
- package/template/community/hamdiayari/akhbar-actualites/screenshot.jpg +0 -0
- package/template/community/hamdiayari/akhbar-actualites/snapify.module.json +107 -0
- package/template/community/hamdiayari/akhbar-actualites/src/admin/AudiencePage.tsx +185 -0
- package/template/community/hamdiayari/akhbar-actualites/src/admin/index.tsx +11 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/Archive.tsx +142 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/cards.tsx +152 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/index.tsx +71 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/posts.ts +103 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/styles.css +568 -0
- package/template/community/hamdiayari/akhbar-actualites/src/public/widgets.tsx +226 -0
- package/template/community/hamdiayari/akhbar-actualites/src/server.ts +119 -0
- package/template/community/hamdiayari/akhbar-actualites/src/types.ts +25 -0
- package/template/community/hamdiayari/akhbar-urgent/README.md +36 -0
- package/template/community/hamdiayari/akhbar-urgent/screenshot.jpg +0 -0
- package/template/community/hamdiayari/akhbar-urgent/snapify.module.json +64 -0
- package/template/community/hamdiayari/akhbar-urgent/src/admin/FlashesPage.tsx +229 -0
- package/template/community/hamdiayari/akhbar-urgent/src/admin/index.tsx +11 -0
- package/template/community/hamdiayari/akhbar-urgent/src/public/Ticker.tsx +81 -0
- package/template/community/hamdiayari/akhbar-urgent/src/public/index.tsx +63 -0
- package/template/community/hamdiayari/akhbar-urgent/src/public/styles.css +142 -0
- package/template/community/hamdiayari/akhbar-urgent/src/server.ts +101 -0
- package/template/community/hamdiayari/akhbar-urgent/src/types.ts +35 -0
- package/template/community.html +21 -0
- package/template/developers.html +24 -0
- package/template/docker-compose.db.yml +24 -0
- package/template/docs/BACKOFFICE_SNAPIFY.md +130 -0
- package/template/docs/CI_CD.md +66 -0
- package/template/docs/MODULES.md +346 -0
- package/template/docs/PLATFORM_DEPLOY.md +54 -0
- package/template/docs/logo.svg +10 -0
- package/template/drizzle/0000_init.sql +147 -0
- package/template/drizzle/0001_page_project.sql +5 -0
- package/template/drizzle/0002_modules.sql +23 -0
- package/template/drizzle/0003_themes.sql +4 -0
- package/template/drizzle/0004_security.sql +82 -0
- package/template/drizzle/0005_module_records.sql +16 -0
- package/template/drizzle/0006_avatars.sql +4 -0
- package/template/drizzle/0007_platform.sql +264 -0
- package/template/drizzle/0008_mp_validation.sql +3 -0
- package/template/drizzle/0009_saas_ops.sql +77 -0
- package/template/drizzle/0010_cms_chrome.sql +13 -0
- package/template/drizzle/0011_client_portal.sql +26 -0
- package/template/drizzle/meta/0000_snapshot.json +998 -0
- package/template/drizzle/meta/0001_snapshot.json +1004 -0
- package/template/drizzle/meta/_journal.json +90 -0
- package/template/drizzle.config.ts +16 -0
- package/template/ecosystem.snapify.cjs +24 -0
- package/template/for.html +1 -0
- package/template/index.html +29 -0
- package/template/landing.html +37 -0
- package/template/marketplace/catalog.json +373 -0
- package/template/marketplace/gallery/hamdiayari.preveris/01-home.jpg +0 -0
- package/template/marketplace/gallery/hamdiayari.recaptcha/01-reglages.jpg +0 -0
- package/template/marketplace/gallery/hamdiayari.recaptcha/02-logo.jpg +0 -0
- package/template/marketplace/gallery/novalabs.ai-articles/01-generer.jpg +0 -0
- package/template/marketplace/gallery/novalabs.ai-articles/02-fournisseur-ia.jpg +0 -0
- package/template/marketplace/gallery/novalabs.calendar/01-agenda-site.jpg +0 -0
- package/template/marketplace/gallery/novalabs.calendar/02-evenements-admin.jpg +0 -0
- package/template/marketplace/gallery/novalabs.calendar/03-reglages.jpg +0 -0
- package/template/marketplace/screenshots/hamdiayari.preveris-1.0.6.jpg +0 -0
- package/template/marketplace/screenshots/hamdiayari.recaptcha-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/hamdiayari.wp-seo-migrator-1.1.1.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.ai-articles-1.0.1.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.ai-chat-1.0.1.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.calendar-1.0.1.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.cart-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.checkout-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.customers-1.1.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.dogga-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.mahdia-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.shop-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.sidibou-1.0.0.jpg +0 -0
- package/template/marketplace/screenshots/novalabs.whatsapp-1.0.1.jpg +0 -0
- package/template/marketplace.html +21 -0
- package/template/metadata.json +7 -0
- package/template/modules/ai-articles/screenshot.jpg +0 -0
- package/template/modules/ai-articles/snapify.module.json +74 -0
- package/template/modules/ai-articles/src/admin/ArticlesPage.tsx +162 -0
- package/template/modules/ai-articles/src/admin/GeneratePage.tsx +118 -0
- package/template/modules/ai-articles/src/admin/index.tsx +12 -0
- package/template/modules/ai-articles/src/public/index.tsx +119 -0
- package/template/modules/ai-articles/src/server.ts +287 -0
- package/template/modules/ai-articles/src/types.ts +30 -0
- package/template/modules/ai-chat/screenshot.jpg +0 -0
- package/template/modules/ai-chat/snapify.module.json +217 -0
- package/template/modules/ai-chat/src/public.tsx +198 -0
- package/template/modules/ai-chat/src/server.ts +142 -0
- package/template/modules/ai-theme-studio/README.md +15 -0
- package/template/modules/ai-theme-studio/screenshot.jpg +0 -0
- package/template/modules/ai-theme-studio/snapify.module.json +175 -0
- package/template/modules/ai-theme-studio/src/admin/HistoryPage.tsx +91 -0
- package/template/modules/ai-theme-studio/src/admin/StudioPage.tsx +414 -0
- package/template/modules/ai-theme-studio/src/admin/index.tsx +11 -0
- package/template/modules/ai-theme-studio/src/lib/images.ts +240 -0
- package/template/modules/ai-theme-studio/src/lib/llm.ts +123 -0
- package/template/modules/ai-theme-studio/src/lib/normalize.ts +714 -0
- package/template/modules/ai-theme-studio/src/lib/prompts.ts +198 -0
- package/template/modules/ai-theme-studio/src/server.ts +137 -0
- package/template/modules/ai-theme-studio/src/types.ts +112 -0
- package/template/modules/calendar/screenshot.jpg +0 -0
- package/template/modules/calendar/snapify.module.json +45 -0
- package/template/modules/calendar/src/admin/EventsPage.tsx +217 -0
- package/template/modules/calendar/src/admin/index.tsx +11 -0
- package/template/modules/calendar/src/public/index.tsx +231 -0
- package/template/modules/calendar/src/server.ts +143 -0
- package/template/modules/calendar/src/types.ts +25 -0
- package/template/modules/cart/screenshot.jpg +0 -0
- package/template/modules/cart/snapify.module.json +90 -0
- package/template/modules/cart/src/admin/index.tsx +265 -0
- package/template/modules/cart/src/public/CartPage.tsx +198 -0
- package/template/modules/cart/src/public/index.tsx +261 -0
- package/template/modules/cart/src/public/useQuote.ts +67 -0
- package/template/modules/cart/src/server.ts +148 -0
- package/template/modules/cart/src/types.ts +31 -0
- package/template/modules/checkout/screenshot.jpg +0 -0
- package/template/modules/checkout/snapify.module.json +264 -0
- package/template/modules/checkout/src/admin/OrderDetailPage.tsx +304 -0
- package/template/modules/checkout/src/admin/badges.tsx +28 -0
- package/template/modules/checkout/src/admin/index.tsx +236 -0
- package/template/modules/checkout/src/public/CheckoutPage.tsx +461 -0
- package/template/modules/checkout/src/public/OrderPages.tsx +153 -0
- package/template/modules/checkout/src/public/index.tsx +23 -0
- package/template/modules/checkout/src/server.ts +383 -0
- package/template/modules/checkout/src/types.ts +70 -0
- package/template/modules/customers/screenshot.jpg +0 -0
- package/template/modules/customers/snapify.module.json +115 -0
- package/template/modules/customers/src/admin/CustomerDetailPage.tsx +274 -0
- package/template/modules/customers/src/admin/index.tsx +194 -0
- package/template/modules/customers/src/public/AccountPages.tsx +470 -0
- package/template/modules/customers/src/public/AddressForm.tsx +115 -0
- package/template/modules/customers/src/public/AuthPages.tsx +349 -0
- package/template/modules/customers/src/public/Avatar.tsx +29 -0
- package/template/modules/customers/src/public/ProfileSection.tsx +291 -0
- package/template/modules/customers/src/public/index.tsx +137 -0
- package/template/modules/customers/src/public/session.ts +51 -0
- package/template/modules/customers/src/server.ts +421 -0
- package/template/modules/customers/src/types.ts +53 -0
- package/template/modules/recaptcha/logo.jpg +0 -0
- package/template/modules/recaptcha/screenshot.jpg +0 -0
- package/template/modules/recaptcha/snapify.module.json +99 -0
- package/template/modules/recaptcha/src/public/index.tsx +94 -0
- package/template/modules/recaptcha/src/server.ts +65 -0
- package/template/modules/recaptcha/src/types.ts +18 -0
- package/template/modules/shop/screenshot.jpg +0 -0
- package/template/modules/shop/snapify.module.json +340 -0
- package/template/modules/shop/src/admin/CategoriesPage.tsx +224 -0
- package/template/modules/shop/src/admin/ProductEditor.tsx +313 -0
- package/template/modules/shop/src/admin/ProductsPage.tsx +307 -0
- package/template/modules/shop/src/admin/index.tsx +14 -0
- package/template/modules/shop/src/public/Catalog.tsx +244 -0
- package/template/modules/shop/src/public/NotFound.tsx +22 -0
- package/template/modules/shop/src/public/ProductPage.tsx +195 -0
- package/template/modules/shop/src/public/index.tsx +134 -0
- package/template/modules/shop/src/public/useFetch.ts +26 -0
- package/template/modules/shop/src/server.ts +493 -0
- package/template/modules/shop/src/shared.ts +41 -0
- package/template/modules/shop/src/types.ts +60 -0
- package/template/modules/whatsapp/screenshot.jpg +0 -0
- package/template/modules/whatsapp/snapify.module.json +121 -0
- package/template/modules/whatsapp/src/public.tsx +119 -0
- package/template/modules/wp-seo-migrator/ARCHITECTURE.md +113 -0
- package/template/modules/wp-seo-migrator/README.md +21 -0
- package/template/modules/wp-seo-migrator/fixtures/aioseo-sample.csv +3 -0
- package/template/modules/wp-seo-migrator/fixtures/sample-exporter.json +39 -0
- package/template/modules/wp-seo-migrator/fixtures/sample-page.html +12 -0
- package/template/modules/wp-seo-migrator/fixtures/sample.htaccess +3 -0
- package/template/modules/wp-seo-migrator/screenshot.jpg +0 -0
- package/template/modules/wp-seo-migrator/snapify.module.json +87 -0
- package/template/modules/wp-seo-migrator/src/admin/HistoryPage.tsx +64 -0
- package/template/modules/wp-seo-migrator/src/admin/WizardPage.tsx +788 -0
- package/template/modules/wp-seo-migrator/src/admin/i18n.ts +156 -0
- package/template/modules/wp-seo-migrator/src/admin/index.tsx +11 -0
- package/template/modules/wp-seo-migrator/src/connectors/CUSTOM_CONNECTOR.md +31 -0
- package/template/modules/wp-seo-migrator/src/connectors/csvSeoFactory.ts +106 -0
- package/template/modules/wp-seo-migrator/src/connectors/exporter.ts +96 -0
- package/template/modules/wp-seo-migrator/src/connectors/gscCsv.ts +53 -0
- package/template/modules/wp-seo-migrator/src/connectors/htaccess.ts +65 -0
- package/template/modules/wp-seo-migrator/src/connectors/htmlCrawler.ts +90 -0
- package/template/modules/wp-seo-migrator/src/connectors/index.ts +113 -0
- package/template/modules/wp-seo-migrator/src/connectors/pluginCsv.ts +77 -0
- package/template/modules/wp-seo-migrator/src/connectors/rankMathCsv.ts +77 -0
- package/template/modules/wp-seo-migrator/src/connectors/redirection.ts +62 -0
- package/template/modules/wp-seo-migrator/src/connectors/sitemap.ts +44 -0
- package/template/modules/wp-seo-migrator/src/connectors/utils.ts +111 -0
- package/template/modules/wp-seo-migrator/src/connectors/wxr.ts +103 -0
- package/template/modules/wp-seo-migrator/src/connectors/yoastCsv.ts +56 -0
- package/template/modules/wp-seo-migrator/src/pipeline/analyze.ts +158 -0
- package/template/modules/wp-seo-migrator/src/pipeline/htmlParse.ts +58 -0
- package/template/modules/wp-seo-migrator/src/pipeline/remoteAuto.ts +328 -0
- package/template/modules/wp-seo-migrator/src/server.ts +492 -0
- package/template/modules/wp-seo-migrator/src/types.ts +151 -0
- package/template/modules/wp-seo-migrator/tests/connectors-extra.test.ts +39 -0
- package/template/modules/wp-seo-migrator/tests/merge.test.ts +25 -0
- package/template/package-lock.json +6016 -0
- package/template/package.json +74 -0
- package/template/public/images/photos/caravane-chameaux-desert.webp +0 -0
- package/template/public/images/photos/hammamet-medina-plage.jpg +0 -0
- package/template/public/images/photos/maison-campagne-collines.webp +0 -0
- package/template/public/images/photos/maisons-troglodytes-desert.jpg +0 -0
- package/template/public/images/photos/panorama-ville.jpg +0 -0
- package/template/public/images/photos/preveris-accessibilite-erp.jpg +0 -0
- package/template/public/images/photos/preveris-collectivites.jpg +0 -0
- package/template/public/images/photos/preveris-etudes-plans.jpg +0 -0
- package/template/public/images/photos/preveris-hero-erp.jpg +0 -0
- package/template/public/images/photos/preveris-ssi-incendie.jpg +0 -0
- package/template/public/images/photos/preveris-suivi-hotel.jpg +0 -0
- package/template/public/images/photos/ruelle-bleue-medina.jpg +0 -0
- package/template/public/images/photos/sidi-bou-said-port.webp +0 -0
- package/template/public/images/photos/terrasse-blanche-mer-voilier.jpg +0 -0
- package/template/public/landing/hero-ai-cms.jpg +0 -0
- package/template/public/landing/shot-dogga.jpg +0 -0
- package/template/public/landing/shot-mahdia.jpg +0 -0
- package/template/public/landing/shot-sidibou.jpg +0 -0
- package/template/public/llms.txt +35 -0
- package/template/public/logo.svg +10 -0
- package/template/scripts/app-pack.ts +155 -0
- package/template/scripts/app-publish.ts +100 -0
- package/template/scripts/apply-ecommerce-home.ts +196 -0
- package/template/scripts/auto-deploy-poll.sh +13 -0
- package/template/scripts/db-backup.sh +16 -0
- package/template/scripts/db-restore.sh +11 -0
- package/template/scripts/deploy.sh +34 -0
- package/template/scripts/github-webhook-deploy.sh +7 -0
- package/template/scripts/install-new-modules.ts +96 -0
- package/template/scripts/refresh-demo-baseline.ts +9 -0
- package/template/scripts/reinstall-marketplace-packs.ts +51 -0
- package/template/scripts/restore-classic-home.ts +13 -0
- package/template/scripts/sdk-pack.ts +289 -0
- package/template/scripts/sdk-publish.ts +75 -0
- package/template/scripts/seed-demo-products.ts +120 -0
- package/template/scripts/seed-theme-content-packs.ts +42 -0
- package/template/scripts/snapify-module.ts +207 -0
- package/template/scripts/test-theme-switch.ts +24 -0
- package/template/sdk/admin.css +18 -0
- package/template/sdk/admin.ts +95 -0
- package/template/sdk/build.ts +249 -0
- package/template/sdk/commerce.ts +512 -0
- package/template/sdk/content.ts +76 -0
- package/template/sdk/icons.ts +101 -0
- package/template/sdk/image.ts +60 -0
- package/template/sdk/index.ts +500 -0
- package/template/sdk/package.ts +298 -0
- package/template/sdk/recaptcha.tsx +122 -0
- package/template/sdk/settings.ts +84 -0
- package/template/sdk/theme.css +29 -0
- package/template/sdk/theme.ts +100 -0
- package/template/sdk/ui/commerce.tsx +385 -0
- package/template/sdk/ui/orders.tsx +136 -0
- package/template/sdk-kit/CHANGELOG.md +17 -0
- package/template/sdk-kit/LICENSE.md +47 -0
- package/template/sdk-kit/README.md +81 -0
- package/template/sdk-kit/cli.ts +339 -0
- package/template/sdk-kit/create-snapify/README.md +28 -0
- package/template/sdk-kit/create-snapify/create-snapify.mjs +11 -0
- package/template/sdk-kit/create-snapify/package.template.json +16 -0
- package/template/sdk-kit/package.template.json +95 -0
- package/template/sdk-kit/templates/common/README.md.tpl +27 -0
- package/template/sdk-kit/templates/common/_gitignore +3 -0
- package/template/sdk-kit/templates/common/package.json.tpl +19 -0
- package/template/sdk-kit/templates/common/src/snapify-env.d.ts +2 -0
- package/template/sdk-kit/templates/common/tsconfig.json +15 -0
- package/template/sdk-kit/templates/module/snapify.module.json.tpl +33 -0
- package/template/sdk-kit/templates/module/src/admin.tsx +53 -0
- package/template/sdk-kit/templates/module/src/public.tsx +49 -0
- package/template/sdk-kit/templates/module/src/server.ts +30 -0
- package/template/sdk-kit/templates/module/src/types.ts +19 -0
- package/template/sdk-kit/templates/theme/snapify.theme.json.tpl +22 -0
- package/template/sdk-kit/templates/theme/src/Footer.tsx +40 -0
- package/template/sdk-kit/templates/theme/src/Header.tsx +47 -0
- package/template/sdk-kit/templates/theme/src/Views.tsx +36 -0
- package/template/sdk-kit/templates/theme/src/blocks.tsx +93 -0
- package/template/sdk-kit/templates/theme/src/index.tsx +30 -0
- package/template/sdk-kit/templates/theme/src/site.tsx +59 -0
- package/template/sdk-kit/templates/theme/src/styles.css +71 -0
- package/template/server/client/routes.ts +252 -0
- package/template/server/cms/analyticsStore.ts +180 -0
- package/template/server/cms/auth.ts +155 -0
- package/template/server/cms/blockCatalog.ts +342 -0
- package/template/server/cms/blocks.ts +521 -0
- package/template/server/cms/contentMigration.ts +1119 -0
- package/template/server/cms/defaults.ts +303 -0
- package/template/server/cms/permissions.ts +154 -0
- package/template/server/cms/restoreClassicHome.ts +183 -0
- package/template/server/cms/revisions.ts +99 -0
- package/template/server/cms/scheduler.ts +78 -0
- package/template/server/cms/seed.ts +72 -0
- package/template/server/cms/seoAnalyzer.ts +213 -0
- package/template/server/cms/store.ts +122 -0
- package/template/server/cms/themeContent.ts +1386 -0
- package/template/server/cms/themePacks/sidibou-branding.json +1 -0
- package/template/server/cms/themePacks/sidibou-home.json +1 -0
- package/template/server/cms/themePacks/sidibou-menus.json +1 -0
- package/template/server/cms/types.ts +432 -0
- package/template/server/community/routes.ts +410 -0
- package/template/server/db/client.ts +43 -0
- package/template/server/db/repository.ts +389 -0
- package/template/server/db/schema.ts +726 -0
- package/template/server/demo/cmsReset.ts +196 -0
- package/template/server/developers/sdk.ts +85 -0
- package/template/server/geoip.ts +15 -0
- package/template/server/http.ts +53 -0
- package/template/server/mail.ts +216 -0
- package/template/server/marketplace/catalog.ts +74 -0
- package/template/server/marketplace/packageValidate.ts +475 -0
- package/template/server/marketplace/payments.ts +193 -0
- package/template/server/marketplace/routes.ts +850 -0
- package/template/server/marketplace/signing.ts +116 -0
- package/template/server/marketplace/syncOfficial.ts +282 -0
- package/template/server/media/images.ts +63 -0
- package/template/server/middleware/adminAuth.ts +134 -0
- package/template/server/modules/legacy.ts +44 -0
- package/template/server/modules/manager.ts +1122 -0
- package/template/server/modules/marketplace.ts +178 -0
- package/template/server/modules/outbound.ts +178 -0
- package/template/server/modules/purchases.ts +149 -0
- package/template/server/modules/records.ts +168 -0
- package/template/server/modules/themeHtml.ts +32 -0
- package/template/server/modules/trust.ts +16 -0
- package/template/server/modules/types.ts +147 -0
- package/template/server/platform/auth.ts +223 -0
- package/template/server/platform/clientWelcome.ts +168 -0
- package/template/server/platform/clients.ts +139 -0
- package/template/server/platform/dailyImprove.ts +356 -0
- package/template/server/platform/flouci.ts +126 -0
- package/template/server/platform/host.ts +69 -0
- package/template/server/platform/hostingProviders.ts +143 -0
- package/template/server/platform/licenseOrders.ts +291 -0
- package/template/server/platform/money.ts +42 -0
- package/template/server/platform/passwords.ts +41 -0
- package/template/server/platform/region.ts +86 -0
- package/template/server/platform/routes.ts +225 -0
- package/template/server/platform/seed.ts +82 -0
- package/template/server/platform/settings.ts +72 -0
- package/template/server/routes/adminAccount.ts +403 -0
- package/template/server/routes/adminCms.ts +808 -0
- package/template/server/routes/adminSystem.ts +243 -0
- package/template/server/routes/adminUsers.ts +449 -0
- package/template/server/routes/googleOAuth.ts +327 -0
- package/template/server/routes/modules.ts +323 -0
- package/template/server/routes/publicCms.ts +313 -0
- package/template/server/routes/seoPublic.ts +158 -0
- package/template/server/security/accounts.ts +121 -0
- package/template/server/security/audit.ts +143 -0
- package/template/server/security/authTokens.ts +74 -0
- package/template/server/security/ip.ts +68 -0
- package/template/server/security/rateLimit.ts +85 -0
- package/template/server/security/retention.ts +46 -0
- package/template/server/security/secrets.ts +44 -0
- package/template/server/security/sessions.ts +140 -0
- package/template/server/security/totp.ts +101 -0
- package/template/server/superadmin/analytics.ts +109 -0
- package/template/server/superadmin/auth.ts +92 -0
- package/template/server/superadmin/backlinksCatalog.ts +210 -0
- package/template/server/superadmin/frSeoContent.ts +165 -0
- package/template/server/superadmin/landingSeo.ts +675 -0
- package/template/server/superadmin/ops.ts +238 -0
- package/template/server/superadmin/routes.ts +1095 -0
- package/template/server/superadmin/tnSeoContent.ts +130 -0
- package/template/server.ts +522 -0
- package/template/src/App.tsx +263 -0
- package/template/src/admin/AdminApp.tsx +162 -0
- package/template/src/admin/account/AuthLayout.tsx +57 -0
- package/template/src/admin/account/SecurityForms.tsx +276 -0
- package/template/src/admin/admin.css +127 -0
- package/template/src/admin/context/AuthContext.tsx +147 -0
- package/template/src/admin/context/SiteContext.tsx +50 -0
- package/template/src/admin/editor/BlockLibrary.tsx +173 -0
- package/template/src/admin/editor/BlocksPanel.tsx +396 -0
- package/template/src/admin/editor/EditorBits.tsx +106 -0
- package/template/src/admin/editor/PreviewFrame.tsx +145 -0
- package/template/src/admin/editor/RichTextEditor.tsx +276 -0
- package/template/src/admin/editor/SeoPanel.tsx +349 -0
- package/template/src/admin/editor/StyleEditor.tsx +114 -0
- package/template/src/admin/editor/blockSchemas.ts +699 -0
- package/template/src/admin/editor/fields.tsx +486 -0
- package/template/src/admin/layout/AdminShell.tsx +418 -0
- package/template/src/admin/layout/nav.ts +95 -0
- package/template/src/admin/lib/api.ts +408 -0
- package/template/src/admin/lib/audit.ts +141 -0
- package/template/src/admin/lib/format.ts +84 -0
- package/template/src/admin/lib/hooks.ts +125 -0
- package/template/src/admin/main.tsx +16 -0
- package/template/src/admin/modules/InstallDialog.tsx +160 -0
- package/template/src/admin/modules/SettingsForm.tsx +145 -0
- package/template/src/admin/modules/kit.tsx +127 -0
- package/template/src/admin/modules/labels.tsx +226 -0
- package/template/src/admin/pages/AccountSetupPage.tsx +62 -0
- package/template/src/admin/pages/AnalyticsPage.tsx +206 -0
- package/template/src/admin/pages/BrandingPage.tsx +154 -0
- package/template/src/admin/pages/DashboardPage.tsx +239 -0
- package/template/src/admin/pages/EngagementPage.tsx +168 -0
- package/template/src/admin/pages/FormsPage.tsx +435 -0
- package/template/src/admin/pages/GeneralPage.tsx +120 -0
- package/template/src/admin/pages/LoginPage.tsx +249 -0
- package/template/src/admin/pages/MaintenancePage.tsx +125 -0
- package/template/src/admin/pages/MarketplacePage.tsx +426 -0
- package/template/src/admin/pages/MediaPage.tsx +251 -0
- package/template/src/admin/pages/MenusPage.tsx +446 -0
- package/template/src/admin/pages/ModuleAdminPage.tsx +113 -0
- package/template/src/admin/pages/ModuleDetailPage.tsx +293 -0
- package/template/src/admin/pages/ModulesPage.tsx +135 -0
- package/template/src/admin/pages/NewsletterPage.tsx +193 -0
- package/template/src/admin/pages/PageEditorPage.tsx +322 -0
- package/template/src/admin/pages/PagesListPage.tsx +277 -0
- package/template/src/admin/pages/PostEditorPage.tsx +292 -0
- package/template/src/admin/pages/PostsListPage.tsx +187 -0
- package/template/src/admin/pages/ProfilePage.tsx +489 -0
- package/template/src/admin/pages/ResetPasswordPage.tsx +110 -0
- package/template/src/admin/pages/SeoPage.tsx +670 -0
- package/template/src/admin/pages/SettingsPage.tsx +189 -0
- package/template/src/admin/pages/ThemeCustomizePage.tsx +170 -0
- package/template/src/admin/pages/ThemesPage.tsx +292 -0
- package/template/src/admin/pages/UsersPage.tsx +57 -0
- package/template/src/admin/pages/WidgetsPage.tsx +200 -0
- package/template/src/admin/seo/GoogleSetup.tsx +529 -0
- package/template/src/admin/settings/EmailTab.tsx +293 -0
- package/template/src/admin/settings/OtherTabs.tsx +270 -0
- package/template/src/admin/settings/SecurityTab.tsx +172 -0
- package/template/src/admin/settings/controls.tsx +133 -0
- package/template/src/admin/ui/Pagination.tsx +170 -0
- package/template/src/admin/ui/SaveBar.tsx +77 -0
- package/template/src/admin/ui/TagInput.tsx +54 -0
- package/template/src/admin/ui/charts.tsx +108 -0
- package/template/src/admin/ui/media.tsx +265 -0
- package/template/src/admin/ui/overlays.tsx +239 -0
- package/template/src/admin/ui/primitives.tsx +544 -0
- package/template/src/admin/users/AuditTab.tsx +104 -0
- package/template/src/admin/users/RolesTab.tsx +368 -0
- package/template/src/admin/users/UsersTab.tsx +723 -0
- package/template/src/admin/users/shared.tsx +278 -0
- package/template/src/cms/icons.ts +7 -0
- package/template/src/components/CookieBanner.tsx +166 -0
- package/template/src/components/MaintenanceGate.tsx +66 -0
- package/template/src/components/SiteAnalytics.tsx +64 -0
- package/template/src/components/SnapifyLogo.tsx +44 -0
- package/template/src/components/cms/BlockRenderer.tsx +154 -0
- package/template/src/components/cms/WidgetArea.tsx +193 -0
- package/template/src/context/SiteConfigContext.tsx +130 -0
- package/template/src/demoBase.ts +23 -0
- package/template/src/index.css +90 -0
- package/template/src/main.tsx +16 -0
- package/template/src/modules/ModuleHost.tsx +197 -0
- package/template/src/preview.ts +63 -0
- package/template/src/runtime.ts +38 -0
- package/template/src/themes/ThemeHost.tsx +168 -0
- package/template/src/themes/fallback.tsx +71 -0
- package/template/src/types.ts +94 -0
- package/template/src/views/BlogPostView.tsx +68 -0
- package/template/src/views/CmsPageView.tsx +34 -0
- package/template/start-pm2.sh +3 -0
- package/template/superadmin.html +20 -0
- package/template/themes/ai-canvas/screenshot.jpg +0 -0
- package/template/themes/ai-canvas/snapify.theme.json +96 -0
- package/template/themes/ai-canvas/src/CeeSimulator.tsx +247 -0
- package/template/themes/ai-canvas/src/Footer.tsx +190 -0
- package/template/themes/ai-canvas/src/Header.tsx +324 -0
- package/template/themes/ai-canvas/src/Layout.tsx +56 -0
- package/template/themes/ai-canvas/src/NotFound.tsx +58 -0
- package/template/themes/ai-canvas/src/Post.tsx +26 -0
- package/template/themes/ai-canvas/src/SnapifyLogo.tsx +44 -0
- package/template/themes/ai-canvas/src/blocks/CollectionBlocks.tsx +711 -0
- package/template/themes/ai-canvas/src/blocks/ContentBlocks.tsx +318 -0
- package/template/themes/ai-canvas/src/blocks/ConversionBlocks.tsx +559 -0
- package/template/themes/ai-canvas/src/blocks/HeaderBlocks.tsx +341 -0
- package/template/themes/ai-canvas/src/index.tsx +54 -0
- package/template/themes/ai-canvas/src/kit.tsx +398 -0
- package/template/themes/ai-canvas/src/site.ts +29 -0
- package/template/themes/ai-canvas/src/styles.css +317 -0
- package/template/themes/dogga/screenshot.jpg +0 -0
- package/template/themes/dogga/snapify.theme.json +55 -0
- package/template/themes/dogga/src/Brand.tsx +41 -0
- package/template/themes/dogga/src/Footer.tsx +202 -0
- package/template/themes/dogga/src/Header.tsx +239 -0
- package/template/themes/dogga/src/Layout.tsx +43 -0
- package/template/themes/dogga/src/Views.tsx +71 -0
- package/template/themes/dogga/src/blocks/CollectionBlocks.tsx +674 -0
- package/template/themes/dogga/src/blocks/ContentBlocks.tsx +307 -0
- package/template/themes/dogga/src/blocks/ConversionBlocks.tsx +571 -0
- package/template/themes/dogga/src/blocks/HeaderBlocks.tsx +289 -0
- package/template/themes/dogga/src/index.tsx +53 -0
- package/template/themes/dogga/src/kit.tsx +362 -0
- package/template/themes/dogga/src/site.ts +56 -0
- package/template/themes/dogga/src/styles.css +396 -0
- package/template/themes/mahdia/screenshot.jpg +0 -0
- package/template/themes/mahdia/snapify.theme.json +65 -0
- package/template/themes/mahdia/src/Brand.tsx +39 -0
- package/template/themes/mahdia/src/Footer.tsx +210 -0
- package/template/themes/mahdia/src/Header.tsx +291 -0
- package/template/themes/mahdia/src/Layout.tsx +44 -0
- package/template/themes/mahdia/src/Views.tsx +79 -0
- package/template/themes/mahdia/src/blocks/CollectionBlocks.tsx +674 -0
- package/template/themes/mahdia/src/blocks/ContentBlocks.tsx +307 -0
- package/template/themes/mahdia/src/blocks/ConversionBlocks.tsx +571 -0
- package/template/themes/mahdia/src/blocks/HeaderBlocks.tsx +289 -0
- package/template/themes/mahdia/src/index.tsx +53 -0
- package/template/themes/mahdia/src/kit.tsx +362 -0
- package/template/themes/mahdia/src/site.ts +75 -0
- package/template/themes/mahdia/src/styles.css +446 -0
- package/template/themes/preveris/screenshot.jpg +0 -0
- package/template/themes/preveris/snapify.theme.json +126 -0
- package/template/themes/preveris/src/Brand.tsx +44 -0
- package/template/themes/preveris/src/Footer.tsx +202 -0
- package/template/themes/preveris/src/Header.tsx +239 -0
- package/template/themes/preveris/src/Layout.tsx +42 -0
- package/template/themes/preveris/src/Views.tsx +71 -0
- package/template/themes/preveris/src/blocks/CollectionBlocks.tsx +678 -0
- package/template/themes/preveris/src/blocks/ContentBlocks.tsx +307 -0
- package/template/themes/preveris/src/blocks/ConversionBlocks.tsx +571 -0
- package/template/themes/preveris/src/blocks/HeaderBlocks.tsx +299 -0
- package/template/themes/preveris/src/index.tsx +53 -0
- package/template/themes/preveris/src/kit.tsx +365 -0
- package/template/themes/preveris/src/site.ts +79 -0
- package/template/themes/preveris/src/styles.css +446 -0
- package/template/themes/sidibou/screenshot.jpg +0 -0
- package/template/themes/sidibou/snapify.theme.json +21 -0
- package/template/themes/sidibou/src/CeeSimulator.tsx +247 -0
- package/template/themes/sidibou/src/Footer.tsx +203 -0
- package/template/themes/sidibou/src/Header.tsx +324 -0
- package/template/themes/sidibou/src/Layout.tsx +53 -0
- package/template/themes/sidibou/src/NotFound.tsx +58 -0
- package/template/themes/sidibou/src/Post.tsx +26 -0
- package/template/themes/sidibou/src/SnapifyLogo.tsx +44 -0
- package/template/themes/sidibou/src/blocks/CollectionBlocks.tsx +711 -0
- package/template/themes/sidibou/src/blocks/ContentBlocks.tsx +318 -0
- package/template/themes/sidibou/src/blocks/ConversionBlocks.tsx +559 -0
- package/template/themes/sidibou/src/blocks/HeaderBlocks.tsx +341 -0
- package/template/themes/sidibou/src/index.tsx +54 -0
- package/template/themes/sidibou/src/kit.tsx +398 -0
- package/template/themes/sidibou/src/site.ts +28 -0
- package/template/themes/sidibou/src/styles.css +317 -0
- package/template/tsconfig.json +33 -0
- package/template/vite.config.ts +42 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
bump:
|
|
10
|
+
description: 'Incrément de version'
|
|
11
|
+
required: true
|
|
12
|
+
type: choice
|
|
13
|
+
options: [patch, minor, major]
|
|
14
|
+
default: minor
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
tag-from-dispatch:
|
|
21
|
+
if: github.event_name == 'workflow_dispatch'
|
|
22
|
+
runs-on: [self-hosted, linux, x64]
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
28
|
+
- env:
|
|
29
|
+
BUMP: ${{ inputs.bump }}
|
|
30
|
+
run: |
|
|
31
|
+
set -euo pipefail
|
|
32
|
+
git config user.name 'github-actions[bot]'
|
|
33
|
+
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
|
|
34
|
+
npm version "$BUMP" -m 'chore(release): %s'
|
|
35
|
+
git push origin HEAD:main --follow-tags
|
|
36
|
+
|
|
37
|
+
release:
|
|
38
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
39
|
+
runs-on: [self-hosted, linux, x64]
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
with:
|
|
43
|
+
fetch-depth: 0
|
|
44
|
+
- run: |
|
|
45
|
+
npm ci --no-audit --no-fund --legacy-peer-deps
|
|
46
|
+
npm run build
|
|
47
|
+
- run: |
|
|
48
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
49
|
+
tar -czf "snapify-${VERSION}.tar.gz" dist package.json package-lock.json scripts/deploy.sh README.md CHANGELOG.md
|
|
50
|
+
sha256sum "snapify-${VERSION}.tar.gz" > "snapify-${VERSION}.tar.gz.sha256"
|
|
51
|
+
- run: |
|
|
52
|
+
python3 - <<'PY'
|
|
53
|
+
import pathlib, os, re
|
|
54
|
+
ver = os.environ["GITHUB_REF_NAME"].lstrip("v")
|
|
55
|
+
text = pathlib.Path("CHANGELOG.md").read_text(encoding="utf-8")
|
|
56
|
+
m = re.search(rf"## \[{re.escape(ver)}\][\s\S]*?(?=\n## |\Z)", text)
|
|
57
|
+
pathlib.Path("release-notes.md").write_text((m.group(0).strip() if m else f"Release Snapify v{ver}") + "\n", encoding="utf-8")
|
|
58
|
+
PY
|
|
59
|
+
- uses: softprops/action-gh-release@v2
|
|
60
|
+
with:
|
|
61
|
+
name: Snapify ${{ github.ref_name }}
|
|
62
|
+
body_path: release-notes.md
|
|
63
|
+
files: |
|
|
64
|
+
snapify-*.tar.gz
|
|
65
|
+
snapify-*.tar.gz.sha256
|
|
66
|
+
generate_release_notes: true
|
|
67
|
+
fail_on_unmatched_files: false
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Toutes les versions notables de Snapify sont documentées ici.
|
|
4
|
+
Format inspiré de [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
|
|
5
|
+
versionnement [SemVer](https://semver.org/lang/fr/).
|
|
6
|
+
|
|
7
|
+
## [1.1.0] — 2026-10-20
|
|
8
|
+
|
|
9
|
+
### Ajouté
|
|
10
|
+
- Marketplace backoffice en cartes (logo, captures, galerie)
|
|
11
|
+
- Achat de modules payants depuis le backoffice (Flouci + licence auto)
|
|
12
|
+
- Superadmin ops (newsletter, tickets, factures, Flouci, paramètres)
|
|
13
|
+
- Community, marketplace publique, portail développeurs
|
|
14
|
+
- Widgets CMS (zones sidebar/footer), menus dynamiques, aperçu articles
|
|
15
|
+
- Blocs group/columns et modèles de blocs sauvegardés
|
|
16
|
+
- CI/CD GitHub Actions (lint, build, déploiement SSH, releases)
|
|
17
|
+
|
|
18
|
+
### Modifié
|
|
19
|
+
- Sidebar admin : sections **Éditorial** / **Applications** / **Messagerie**
|
|
20
|
+
- Catalogue modules (prix, galerie, captures)
|
|
21
|
+
|
|
22
|
+
### Sécurité
|
|
23
|
+
- `.env` retiré du suivi Git ; secrets uniquement via `.env` serveur / GitHub Secrets
|
|
24
|
+
|
|
25
|
+
## [1.0.0] — 2026-10-01
|
|
26
|
+
|
|
27
|
+
### Ajouté
|
|
28
|
+
- Première version publique Snapify (CMS, thèmes, modules, marketplace locale)
|
package/template/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Snapify — Licence propriétaire
|
|
2
|
+
|
|
3
|
+
Copyright © 2026 NOVALABS WEB DESIGN — Tunisie
|
|
4
|
+
Contact : contact@novalabs.tn · +216 24 734 647
|
|
5
|
+
|
|
6
|
+
Tous droits réservés.
|
|
7
|
+
|
|
8
|
+
Ce logiciel, son code source, sa documentation et ses éléments graphiques sont
|
|
9
|
+
la propriété exclusive de NOVALABS WEB DESIGN. Toute reproduction, modification,
|
|
10
|
+
distribution, publication, sous-licence ou utilisation, totale ou partielle, sans
|
|
11
|
+
l'autorisation écrite préalable de NOVALABS WEB DESIGN est strictement interdite.
|
|
12
|
+
|
|
13
|
+
CE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU
|
|
14
|
+
IMPLICITE.
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="docs/logo.svg" alt="Snapify" width="88" height="88" />
|
|
4
|
+
|
|
5
|
+
# Snapify
|
|
6
|
+
|
|
7
|
+
**CMS et plateforme e-commerce modulaire : pages par blocs, thèmes, modules signés et back-office complet.**
|
|
8
|
+
|
|
9
|
+
[](https://react.dev)
|
|
10
|
+
[](https://www.typescriptlang.org)
|
|
11
|
+
[](https://vite.dev)
|
|
12
|
+
[](https://tailwindcss.com)
|
|
13
|
+
[](https://expressjs.com)
|
|
14
|
+
[](https://www.postgresql.org)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
|
|
17
|
+
[Fonctionnalités](#fonctionnalités) · [Démarrage rapide](#démarrage-rapide) · [Architecture](#architecture) · [Modules et thèmes](#modules-et-thèmes) · [Déploiement](#mise-en-production) · [Documentation](#documentation)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<img src="docs/screenshots/storefront-home.jpg" alt="Boutique Snapify avec le thème Mahdia" width="49%" />
|
|
25
|
+
<img src="docs/screenshots/admin-dashboard.jpg" alt="Tableau de bord de l'administration" width="49%" />
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
## Présentation
|
|
29
|
+
|
|
30
|
+
Snapify est un système de gestion de contenu auto-hébergé, conçu pour créer et administrer des sites vitrines et des boutiques en ligne sans écrire de code. Le site public et l'administration (`/administrator`) partagent une même base React ; le serveur Express gère le rendu, le référencement, la sécurité et l'exécution des modules.
|
|
31
|
+
|
|
32
|
+
Deux plateformes complémentaires tournent sur le même serveur (routage par `Host`) :
|
|
33
|
+
|
|
34
|
+
- **Community** (`community.snapify.tn`) — forum pour la communauté Snapify
|
|
35
|
+
- **Marketplace** (`marketplace.snapify.tn`) — thèmes & modules, inscription développeur 100 DT (Flouci), commission configurable
|
|
36
|
+
|
|
37
|
+
Voir [docs/PLATFORM_DEPLOY.md](docs/PLATFORM_DEPLOY.md).
|
|
38
|
+
|
|
39
|
+
Le cœur reste léger : l'apparence vient des **thèmes**, les fonctionnalités métier (boutique, panier, commandes, espace client, chat IA…) viennent des **modules**. Thèmes et modules sont distribués sous forme de paquets **signés** et s'installent depuis la marketplace intégrée.
|
|
40
|
+
|
|
41
|
+
## Fonctionnalités
|
|
42
|
+
|
|
43
|
+
### Contenu et édition
|
|
44
|
+
- **Éditeur de pages par blocs** : 25 types de blocs (héros, galerie, témoignages, FAQ, tableaux, appels à l'action…), glisser-déposer, aperçu en direct sur ordinateur, tablette et mobile.
|
|
45
|
+
- **Blog** avec éditeur de texte riche et publication planifiée.
|
|
46
|
+
- **Révisions** (50 par contenu) avec restauration, brouillons et workflow de relecture.
|
|
47
|
+
- **Médiathèque**, menus imbriqués, formulaires personnalisables, newsletter en double opt-in, boutons flottants.
|
|
48
|
+
|
|
49
|
+
### E-commerce
|
|
50
|
+
- **Catalogue** : produits avec galerie, prix barrés et promotions, stock, catégories, recherche, tri et filtres.
|
|
51
|
+
- **Panier** latéral et page panier, **codes promo** (pourcentage, montant fixe, livraison offerte).
|
|
52
|
+
- **Tunnel de commande** en une page : adresses en Tunisie (gouvernorats), modes de livraison, paiement à la livraison ou par virement, e-mails de confirmation et suivi de commande.
|
|
53
|
+
- **Espace client** : inscription, connexion, commandes, carnet d'adresses, favoris, profil et photo.
|
|
54
|
+
- **Back-office commerce** : tableau des ventes, gestion des commandes et de leurs statuts, fiches clients, export CSV.
|
|
55
|
+
|
|
56
|
+
### Apparence
|
|
57
|
+
- **Thèmes interchangeables** à chaud, avec options de personnalisation (couleurs, typographie, en-tête, pied de page) et identité visuelle.
|
|
58
|
+
- Trois thèmes fournis : **Mahdia** (e-commerce), **SidiBou** et **Dogga** (vitrines).
|
|
59
|
+
|
|
60
|
+
### Référencement et audience
|
|
61
|
+
- Métadonnées par page, `sitemap.xml`, `robots.txt`, redirections 301 et analyse SEO avec score.
|
|
62
|
+
- Assistant de connexion **Google Search Console**.
|
|
63
|
+
- **Statistiques de visite** intégrées et respectueuses de la vie privée (pages vues, visiteurs, pays, temps moyen par page), bandeau de consentement aux cookies.
|
|
64
|
+
|
|
65
|
+
### Administration et sécurité
|
|
66
|
+
- **Rôles et permissions** fins (26 permissions, rôles personnalisables), invitations par e-mail.
|
|
67
|
+
- **Double authentification (TOTP)**, gestion des sessions actives, limitation de débit, liste d'IP autorisées.
|
|
68
|
+
- **Journal d'audit** de toutes les actions sensibles, rétention configurable des données.
|
|
69
|
+
- **Secrets chiffrés en base** (mot de passe SMTP, clés 2FA).
|
|
70
|
+
- **Mode maintenance** (réponse HTTP 503 avec `Retry-After`).
|
|
71
|
+
|
|
72
|
+
## Aperçu de l'administration
|
|
73
|
+
|
|
74
|
+
<p align="center">
|
|
75
|
+
<img src="docs/screenshots/admin-orders.jpg" alt="Gestion des commandes" width="49%" />
|
|
76
|
+
<img src="docs/screenshots/admin-products.jpg" alt="Catalogue produits" width="49%" />
|
|
77
|
+
</p>
|
|
78
|
+
<p align="center">
|
|
79
|
+
<img src="docs/screenshots/storefront-catalog.jpg" alt="Catalogue de la boutique" width="70%" />
|
|
80
|
+
</p>
|
|
81
|
+
|
|
82
|
+
## Stack technique
|
|
83
|
+
|
|
84
|
+
| Couche | Technologies |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| Interface | React 19, React Router 7, Tailwind CSS 4, Motion, Lucide, TipTap, Recharts, dnd-kit |
|
|
87
|
+
| Build | Vite 8, TypeScript, tsx |
|
|
88
|
+
| Serveur | Node.js, Express 4, Nodemailer, geoip-lite |
|
|
89
|
+
| Données | PostgreSQL 17, Drizzle ORM (migrations SQL versionnées) |
|
|
90
|
+
| IA | Google Gemini (module Chat IA, clé côté serveur uniquement) |
|
|
91
|
+
|
|
92
|
+
## Démarrage rapide
|
|
93
|
+
|
|
94
|
+
### Installateur npm (recommandé)
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx create-snapify-app@latest mon-site
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Le wizard demande le **domaine**, les identifiants **PostgreSQL** et le compte **admin**, puis installe le code source complet, écrit `.env`, lance `npm install` et `npm run build`.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd mon-site
|
|
104
|
+
NODE_ENV=production npm start
|
|
105
|
+
# Admin : https://votre-domaine/administrator
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Prérequis
|
|
109
|
+
|
|
110
|
+
- **Node.js 22** ou plus récent
|
|
111
|
+
- **PostgreSQL 17** : via Docker (fourni) ou une installation locale
|
|
112
|
+
|
|
113
|
+
### Installation depuis ce dépôt
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# 1. Dépendances
|
|
117
|
+
npm install
|
|
118
|
+
|
|
119
|
+
# 2. Configuration : copier puis compléter les valeurs
|
|
120
|
+
cp .env.example .env
|
|
121
|
+
|
|
122
|
+
# 3. Base de données (conteneur Docker, port local 5433)
|
|
123
|
+
npm run db:up
|
|
124
|
+
|
|
125
|
+
# 4. Construction du site public et de l'administration
|
|
126
|
+
npm run build
|
|
127
|
+
|
|
128
|
+
# 5. Lancement
|
|
129
|
+
npm run dev
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Le site est servi sur le port défini par `PORT`, l'administration sur **`/administrator`**. Les migrations sont appliquées automatiquement au démarrage, et le premier compte administrateur est créé à partir de `ADMIN_EMAIL` et `ADMIN_PASSWORD`.
|
|
133
|
+
|
|
134
|
+
> [!NOTE]
|
|
135
|
+
> Avec `NODE_ENV=production`, le serveur sert les fichiers compilés de `dist/` : relancez `npm run build` après chaque modification du front. Sans cette variable, Vite fonctionne en mode développement avec rechargement à chaud.
|
|
136
|
+
|
|
137
|
+
### Restaurer la base de démonstration
|
|
138
|
+
|
|
139
|
+
Le dossier [`database/`](database) contient un dump PostgreSQL complet (pages, produits, commandes de test, réglages, modules installés) :
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pg_restore -d "$DATABASE_URL" --clean --if-exists --no-owner database/snapify-20261013-124021.dump
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Les fichiers des modules installés (`data/modules/`) et les fichiers déposés (`public/uploads/`) sont versionnés avec le dépôt pour que la restauration soit complète.
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
Toute la configuration passe par le fichier `.env` (modèle commenté : [`.env.example`](.env.example)).
|
|
150
|
+
|
|
151
|
+
| Variable | Rôle |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| `PORT`, `NODE_ENV` | Port d'écoute et mode d'exécution (`production` sert `dist/`) |
|
|
154
|
+
| `DATABASE_URL`, `SNAPIFY_DB_PASSWORD` | Connexion PostgreSQL et mot de passe du conteneur Docker |
|
|
155
|
+
| `ADMIN_EMAIL`, `ADMIN_PASSWORD` | Premier compte super administrateur |
|
|
156
|
+
| `ADMIN_JWT_SECRET` | Signature des sessions de l'administration |
|
|
157
|
+
| `SNAPIFY_SECRET_KEY` | Chiffrement des secrets en base. **Ne plus la modifier une fois définie** |
|
|
158
|
+
| `SNAPIFY_ADMIN_URL` | Adresse de l'administration utilisée dans les e-mails |
|
|
159
|
+
| `SNAPIFY_ADMIN_IP_BYPASS` | Secours : ignore la liste d'IP autorisées |
|
|
160
|
+
| `GEMINI_API_KEY` | Clé Google Gemini du module Chat IA |
|
|
161
|
+
| `MARKETPLACE_URL` | Catalogue distant HTTPS (vide : catalogue local `marketplace/`) |
|
|
162
|
+
| `SNAPIFY_MODULES_DEV_MODE` | Autorise les paquets non signés (développement uniquement) |
|
|
163
|
+
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `GOOGLE_REDIRECT_URI` | OAuth Google Search Console (également configurable dans l'admin) |
|
|
164
|
+
| `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS`, `SMTP_FROM` | Envoi d'e-mails (le réglage de l'admin est prioritaire) |
|
|
165
|
+
|
|
166
|
+
## Architecture
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
.
|
|
170
|
+
├── server.ts Point d'entrée Express (rendu, API, assets)
|
|
171
|
+
├── server/
|
|
172
|
+
│ ├── cms/ Contenu, blocs, révisions, SEO, planification, permissions
|
|
173
|
+
│ ├── db/ Schéma Drizzle, client et dépôt PostgreSQL
|
|
174
|
+
│ ├── modules/ Gestionnaire de modules et thèmes, marketplace, signatures
|
|
175
|
+
│ ├── routes/ API publique, administration, comptes, Google OAuth
|
|
176
|
+
│ ├── security/ Sessions, 2FA, limitation de débit, audit, secrets, IP
|
|
177
|
+
│ └── media/ Traitement et validation des images
|
|
178
|
+
├── src/
|
|
179
|
+
│ ├── admin/ Application d'administration (pages, éditeur, UI)
|
|
180
|
+
│ ├── themes/, modules/ Hôtes de rendu des thèmes et modules côté client
|
|
181
|
+
│ └── views/, components/ Rendu des pages et composants partagés
|
|
182
|
+
├── sdk/ SDK des modules et thèmes (API 1.3, build, paquets, UI commerce)
|
|
183
|
+
├── modules/ Sources des modules officiels
|
|
184
|
+
├── themes/ Sources des thèmes officiels
|
|
185
|
+
├── marketplace/ Catalogue local et paquets signés (.snapmod, .snaptheme)
|
|
186
|
+
├── drizzle/ Migrations SQL
|
|
187
|
+
├── database/ Dump PostgreSQL de référence
|
|
188
|
+
├── scripts/ Sauvegarde, restauration, outil de build des modules
|
|
189
|
+
└── docs/ Documentation technique et fonctionnelle
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Principes clés**
|
|
193
|
+
|
|
194
|
+
- **Rendu côté serveur des métadonnées** : titre, description et balises de partage sont injectés dans le HTML de chaque page pour le référencement, puis React prend le relais.
|
|
195
|
+
- **Modules isolés** : chaque module déclare ses permissions (routes HTTP, base de données, e-mails, fichiers, accès réseau…) dans son manifeste. Le serveur ne lui expose que ce qui a été accordé et vérifie l'intégrité de ses fichiers à chaque démarrage.
|
|
196
|
+
- **Styles cloisonnés** : la feuille de style de chaque module est limitée à son conteneur pour ne jamais altérer le thème ni l'administration.
|
|
197
|
+
|
|
198
|
+
## Modules et thèmes
|
|
199
|
+
|
|
200
|
+
### Modules officiels
|
|
201
|
+
|
|
202
|
+
| Module | Version | Description |
|
|
203
|
+
| --- | --- | --- |
|
|
204
|
+
| **Boutique** `novalabs.shop` | 1.0.0 | Catalogue, catégories, fiches produit, stock, widgets de mise en avant |
|
|
205
|
+
| **Panier** `novalabs.cart` | 1.0.0 | Panier latéral, page panier, codes promo |
|
|
206
|
+
| **Commande** `novalabs.checkout` | 1.0.0 | Tunnel de commande, livraison, paiement, e-mails, gestion des commandes |
|
|
207
|
+
| **Espace client** `novalabs.customers` | 1.1.0 | Comptes clients, tableau de bord, adresses, favoris, photo de profil |
|
|
208
|
+
| **Chat IA** `novalabs.ai-chat` | 1.0.1 | Assistant conversationnel Gemini avec quotas par visiteur |
|
|
209
|
+
| **WhatsApp** `novalabs.whatsapp` | 1.0.1 | Bouton de contact WhatsApp configurable |
|
|
210
|
+
|
|
211
|
+
### Thèmes officiels
|
|
212
|
+
|
|
213
|
+
| Thème | Style |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| **Mahdia** `novalabs.mahdia` | Boutique en ligne : sable, bleu Méditerranée et touches dorées, en-tête e-commerce |
|
|
216
|
+
| **SidiBou** `novalabs.sidibou` | Vitrine lumineuse, sections animées, cartes arrondies |
|
|
217
|
+
| **Dogga** `novalabs.dogga` | Vitrine éditoriale, titres à empattements, palette pierre et terre cuite |
|
|
218
|
+
|
|
219
|
+
### Créer et publier un paquet
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Construire et signer (sortie : marketplace/packages/<id>-<version>.snapmod)
|
|
223
|
+
SNAPIFY_SIGNING_KEY=~/.snapify/keys/<cle>.pem npm run module -- build modules/mon-module
|
|
224
|
+
|
|
225
|
+
# Vérifier un paquet (signature, empreintes, manifeste)
|
|
226
|
+
npm run module -- verify marketplace/packages/editeur.mon-module-1.0.0.snapmod
|
|
227
|
+
|
|
228
|
+
# Régénérer le catalogue local
|
|
229
|
+
npm run module -- catalog
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
La clé privée de signature se conserve **hors du dépôt**. Le guide complet (manifeste, API serveur, permissions, format des paquets, licences) est dans [docs/MODULES.md](docs/MODULES.md).
|
|
233
|
+
|
|
234
|
+
## Rôles par défaut
|
|
235
|
+
|
|
236
|
+
| Rôle | Périmètre |
|
|
237
|
+
| --- | --- |
|
|
238
|
+
| Super administrateur | Accès complet, y compris rôles, sécurité et paramètres avancés |
|
|
239
|
+
| Éditeur | Contenu, menus, médias, contacts, apparence, données des modules |
|
|
240
|
+
| Contributeur | Rédaction de pages et d'articles en brouillon |
|
|
241
|
+
| Référenceur SEO | Référencement et statistiques |
|
|
242
|
+
| Lecteur | Consultation des statistiques et des messages |
|
|
243
|
+
|
|
244
|
+
Les rôles sont modifiables et de nouveaux rôles peuvent être créés depuis **Utilisateurs › Rôles**.
|
|
245
|
+
|
|
246
|
+
## Scripts
|
|
247
|
+
|
|
248
|
+
| Commande | Rôle |
|
|
249
|
+
| --- | --- |
|
|
250
|
+
| `npm run dev` | Démarre le serveur (Vite en développement, `dist/` en production) |
|
|
251
|
+
| `npm run build` | Compile le site public et l'administration |
|
|
252
|
+
| `npm run lint` | Vérification TypeScript |
|
|
253
|
+
| `npm run db:up` | Démarre le conteneur PostgreSQL |
|
|
254
|
+
| `npm run db:generate` | Génère une migration après modification de `server/db/schema.ts` |
|
|
255
|
+
| `npm run db:studio` | Explorateur de base Drizzle Studio |
|
|
256
|
+
| `npm run db:backup` | Sauvegarde de la base dans `backups/db/` |
|
|
257
|
+
| `npm run db:restore -- <fichier>` | Restaure une sauvegarde |
|
|
258
|
+
| `npm run module -- <commande>` | Outil des paquets : `build`, `verify`, `catalog`, `license`, `keygen` |
|
|
259
|
+
|
|
260
|
+
## Mise en production
|
|
261
|
+
|
|
262
|
+
1. Définir `NODE_ENV=production` et des valeurs fortes et uniques pour `ADMIN_PASSWORD`, `ADMIN_JWT_SECRET` et `SNAPIFY_SECRET_KEY`.
|
|
263
|
+
2. Renseigner `SNAPIFY_ADMIN_URL`, le SMTP et, si besoin, Google Search Console.
|
|
264
|
+
3. `npm ci && npm run build`, puis lancer le serveur sous un gestionnaire de processus (pm2, systemd).
|
|
265
|
+
4. Placer un reverse proxy HTTPS (Nginx, Caddy) devant le port de l'application.
|
|
266
|
+
5. Programmer `npm run db:backup` quotidiennement (conservation de 14 jours par défaut).
|
|
267
|
+
|
|
268
|
+
> [!WARNING]
|
|
269
|
+
> Ce dépôt contient le fichier `.env` et un dump de la base. Il doit rester **privé**. Avant toute ouverture ou tout partage, retirez ces fichiers et renouvelez l'ensemble des secrets.
|
|
270
|
+
|
|
271
|
+
## Documentation
|
|
272
|
+
|
|
273
|
+
| Document | Contenu |
|
|
274
|
+
| --- | --- |
|
|
275
|
+
| [docs/BACKOFFICE_SNAPIFY.md](docs/BACKOFFICE_SNAPIFY.md) | Guide complet de l'administration, paramètres, base de données, configuration |
|
|
276
|
+
| [docs/MODULES.md](docs/MODULES.md) | Guide développeur des modules et thèmes : SDK, manifeste, sécurité, publication |
|
|
277
|
+
|
|
278
|
+
## Licence
|
|
279
|
+
|
|
280
|
+
Logiciel propriétaire. © 2026 **NOVALABS WEB DESIGN**, Tunisie. Tous droits réservés.
|
|
281
|
+
Toute reproduction, modification ou diffusion sans autorisation écrite est interdite. Voir [LICENSE](LICENSE).
|
|
282
|
+
|
|
283
|
+
<div align="center">
|
|
284
|
+
|
|
285
|
+
**NOVALABS WEB DESIGN** · [contact@novalabs.tn](mailto:contact@novalabs.tn) · +216 24 734 647
|
|
286
|
+
|
|
287
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
Snapify
|
|
4
|
+
© 2026 NOVALABS WEB DESIGN — Tunisie
|
|
5
|
+
Contact : contact@novalabs.tn · +216 24 734 647
|
|
6
|
+
Tous droits réservés. Toute reproduction, modification ou diffusion sans autorisation écrite est interdite.
|
|
7
|
+
-->
|
|
8
|
+
<html lang="fr">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="UTF-8" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
12
|
+
<meta name="robots" content="noindex, nofollow" />
|
|
13
|
+
<title>Snapify — Backoffice</title>
|
|
14
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
15
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
16
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
17
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Crect width='40' height='40' rx='10' fill='%230B1528'/%3E%3Crect x='7' y='9' width='26' height='22' rx='4' fill='none' stroke='%23fff' stroke-width='2.4'/%3E%3Cpath d='M7 15.5H33' stroke='%23fff' stroke-width='2.4'/%3E%3Ccircle cx='11' cy='12.3' r='1.1' fill='%23ff7300'/%3E%3Ccircle cx='14.4' cy='12.3' r='1.1' fill='%23ff7300'/%3E%3Cpath d='M20 18.2L21.6 22L25.4 23.6L21.6 25.2L20 29L18.4 25.2L14.6 23.6L18.4 22Z' fill='%23ff7300'/%3E%3C/svg%3E" />
|
|
18
|
+
</head>
|
|
19
|
+
<body class="bg-slate-950 text-slate-100 antialiased">
|
|
20
|
+
<div id="root"></div>
|
|
21
|
+
<script type="module" src="/src/admin/main.tsx"></script>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|