Version: alpha | Latest release: v0.2.8
A modern, full-featured CMS built with Vue 3 + Vite, Express.js, and SQLite.
See docs/SETUP_GUIDE.md for installation and running instructions. For a system overview, check docs/ARCHITECTURE.md.
- Start the backend:
npm run server - Start the frontend:
npm run dev - Login: Visit
/admin/loginwith credentials:- Username:
resonancedesigns - Password:
i4Vc$oUU%AR!WK3W
- Username:
- Posts, pages, categories, navigation menus, media library
- Multiple navigation menus with per-item targets; menu block element for layouts (horizontal/vertical)
- Theme system with header/body/footer builders, a single-column sidebar builder (with placement + width), and per-section spacing/borders
- Extensible content via
post_typeand post metadata (rdcms_postmeta) for plugin-style additions - Plugin system with upload/activate workflow and bundled GLink plugin (Google Analytics/AdSense) configurable entirely from the admin UI
- WordPress-style shortcodes for posts/pages/media in rich content
- Admin panel with JWT auth and Pinia state
- Tailwind CSS styling with custom theme tokens
- SQLite-backed Express API
- Frontend: Vue 3, Vue Router, Pinia, Vite
- Backend: Express.js, SQLite
- Styling: Tailwind CSS
- Authentication: JWT with bcryptjs
- Themes live under
server/themes/<slug>and expose afunctions.js(ortheme.json) manifest withname,slug,version,author,description,style,defaultSettings, andsettingsSchema. - Each theme should include its own CSS (referenced by
style) and can rely on settings as CSS variables written to--theme-<key>. Theme builders define header/footer layouts; per-section padding/margin/border settings are stored with the active theme. - Install a theme by uploading a
.zip(containingfunctions.js+ assets) from Admin -> Design -> Theme. The backend unzips toserver/themes/<slug>, registers the manifest in SQLite, and serves assets from/themes/<slug>/.... - Activate a theme in the Theme tab; the active theme's stylesheet is injected automatically on page load and settings are persisted in SQLite.
- Sample bundled theme:
server/themes/resdes-basicshowing CSS variables, settings schema, and header/footer layouts. - See docs/THEMEDEV.md for theme authoring details.
- Media uploads are served from the API (
/uploads/<file>). If your frontend and backend run on different origins, setVITE_API_BASEto the API origin (e.g.,http://localhost:3001) in your.envand restartnpm run devso media URLs and API calls resolve correctly.
- Upload/activate plugins under Admin -> Plugins. Plugins mount their own API routes from
server/plugins/<slug>/routes.jsand expose admin menu items from their manifest (only shown when active). - Bundled examples:
- RDCommerce (Ecommerce): Self-contained plugin for Square payment processor integration - configure via admin (Application ID/Access Token), toggle between sandbox/production modes, import inventory with date/stock filters, and manage products with full CRUD operations. Products stored as posts with metadata (SKU, price, stock, Square ID). Optional env vars (
RDCOMMERCE_SQUARE_APP_ID,RDCOMMERCE_SQUARE_ACCESS_TOKEN) are supported but UI settings take priority. - GLink (Google Analytics/AdSense): Self-contained plugin for Google integration - configure via admin (Client ID/Secret + redirect URI), connect to Google, pick account/property/stream, and optionally enable testing mode or "Track Admin Usage" to inject GA on admin routes. Optional env vars (
GLINK_CLIENT_ID,GLINK_CLIENT_SECRET,GLINK_REDIRECT_URI) are supported but UI settings take priority. - GitLink (GitHub): Self-contained plugin for GitHub integration - connect via OAuth to list repos, render via
[gitlink mode="small-list|medium-list"]shortcode or the "GitHub Repos" block element; plugin auto-loads its renderer and fetches repos on the frontend. Optional env vars (GITLINK_CLIENT_ID,GITLINK_CLIENT_SECRET,GITLINK_REDIRECT_URI) are supported but UI settings take priority.
- RDCommerce (Ecommerce): Self-contained plugin for Square payment processor integration - configure via admin (Application ID/Access Token), toggle between sandbox/production modes, import inventory with date/stock filters, and manage products with full CRUD operations. Products stored as posts with metadata (SKU, price, stock, Square ID). Optional env vars (
- Plugin admin UIs are loaded from each plugin's manifest (
adminView), keeping plugin frontends bundled with the plugin.
[post slug="welcome-to-resdescms" display="full|medium|small|link" target="same|new"]renders a post snippet or link (targetonly applies todisplay="link"; defaults to same tab).[page slug="about" display="link" target="same|new"]renders a link to a page by slug (targetoptional, defaults to same tab).[media id="5" width="300px"]renders an image from the media library (width optional).
- v0.2.9 (alpha): Reusable media details modal now powers the Media Library with auto-save + explicit save, updated button styling/new-tab download, and media metadata update API; admin About page added and linked from the sidebar logo.
- v0.2.8 (alpha): Posts/pages editors now use sidebars with author selection, scheduling, and per-instance featured image metadata + modal; media uploads organized by year/month with uploader metadata; auto-logout on expired tokens.
- v0.2.7 (alpha): Unified pagination across posts/pages/media/users (per-page apply, page jump, first/last arrows); media API paginated; theme management adds single-row color controls plus background image picker with repeat/size/position/attachment presets.
See docs/CHANGELOG.md for full update logs.