{"id":26517980,"url":"https://github.com/mexaar/meteor-interface","last_synced_at":"2025-03-21T09:19:22.435Z","repository":{"id":57295845,"uuid":"137872247","full_name":"MeXaaR/meteor-interface","owner":"MeXaaR","description":"A Content Management System for MeteorJS","archived":false,"fork":false,"pushed_at":"2022-03-25T15:25:19.000Z","size":138,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-20T10:19:48.657Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MeXaaR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-19T09:49:17.000Z","updated_at":"2023-09-07T15:24:19.000Z","dependencies_parsed_at":"2022-09-01T08:41:54.826Z","dependency_job_id":null,"html_url":"https://github.com/MeXaaR/meteor-interface","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeXaaR%2Fmeteor-interface","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeXaaR%2Fmeteor-interface/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeXaaR%2Fmeteor-interface/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeXaaR%2Fmeteor-interface/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MeXaaR","download_url":"https://codeload.github.com/MeXaaR/meteor-interface/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244767797,"owners_count":20507110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-21T09:19:21.476Z","updated_at":"2025-03-21T09:19:22.427Z","avatar_url":"https://github.com/MeXaaR.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ca href='https://www.mexar.fr'\u003e\u003cimg src='https://s3-eu-west-3.amazonaws.com/mexar/projects/logo_interface_black.png' height='60' alt='MeXaR'\u003e\u003c/a\u003e Meteor Interface\n\n\nMeteor-Interface is an ultra-simple CMS for Meteor  apps.** It is based on React and made with Semantic UI.** It's an early stage project so there are a lot I will do in the future days, but this version is ready for production on simple websites. You just have to configure it and it creates all the methods and publications for you.\n\nLet' see how you do that !!\n\n## Quick Start\n\nStart by installing the package.\n\n```\n$ meteor add mexar:meteor-interface\n```\n\n## Configuration\nInterface works with a configuration file accessible for both your client AND server. I usually put it at the root of my project\nHere is an example\n\n```javascript\n// import your collections\nimport Clients from '/imports/api/clients/clients'\n// or create it, but interface must has access to your databases\nconst LandingPage = new Mongo.Collection(\"landing-page\");\n\nimport { createInterface } from 'meteor/mexar:meteor-interface'\n\n// widget list: string, html, boolean, list, image, date, number\nconst config = {\n    title: 'Interface CMS',  // Title on the brower tab\n    root: '/admin', // route to Interface, it must be the same as the route in your router\n    login: '/login', // route to Interface login\n    toastPosition: 'bottom left', // position of the notification system toasters\n    logs: true, // to see all interface actions in your server console\n    logo: \"https://goo.gl/WQahB9\",\n    roles: ['super-admin', 'admin', 'editor'], // Be sure to put the super admin roles in the first position\n    media_roles: ['super-admin', 'admin'], // Who can edit, upload and delete media. Others can only use them and see them\n    collections: [ // configure your collections\n        {\n            single: false, // default - Tell if the document must be alone in the database\n            name: 'Clients', // Must be a string written exactly like the collection variable\n            label: 'Projects executed', // displayed label in the interface\n            mongo: Clients, // your mongo collections\n            icon: 'chart line', // icon based on Semantic UI\n            visible: ['editor', 'admin', 'super-admin'], // visible for these roles\n            edit: ['admin', 'super-admin'], // editable by these roles\n            create: ['admin', 'super-admin'], // creatable by these roles\n            fields: [\n                { name: 'name', label: 'Name', widget: 'string' }, \n                { name: 'logo', label: 'Logo', widget: 'image' },\n                { name: 'link', label: 'Link', widget: 'string' },\n                { name: 'finished', label: 'Finished', widget: 'boolean' },\n                { name: 'position', label: 'Position', widget: 'number' },\n                { name: 'createdAt', label: 'Created At', widget: 'date' },\n                { name: 'description', label: 'Description', widget: 'html' },\n                { name: 'techno', label: 'Techno', widget: 'list' }\n            ]\n        },\n        {\n            single: true, // default - Tell if the document must be alone in the database\n            name: 'LandingPage', // Must be a string written exactly like the collection variable\n            label: 'Landing page', // displayed label in the interface\n            mongo: LandingPage,\n            icon: 'rocket',\n            visible: ['editor', 'admin', 'super-admin'], // visible for these roles\n            edit: ['admin', 'super-admin', 'editor'], // editable by these roles\n            create: ['admin', 'super-admin'], // creatable by these roles\n            fields: [\n                { name: 'catch', label: 'Catch phrase', widget: 'string' },\n\n                { name: 'firstTitle', label: 'First section title', widget: 'string' },\n                { name: 'aboutNode', \n                label: 'About NodeJS',\n                widget: 'list',\n                fields: [\n                        { name: 'title', label: 'Title', widget: 'string' },\n                        { name: 'icon', label: 'Icon', widget: 'string' },\n                        { name: 'image', label: 'Image if no icon', widget: 'image' },\n                        { name: 'description', label: 'Description', widget: 'html' },\n                    ]\n                },\n\n                { name: 'clientsTitle', label: 'Clients section title', widget: 'string' },\n\n                { name: 'contactTitle', label: 'Contact section title', widget: 'string' },\n                { name: 'email', label: 'Contact email address', widget: 'string' },\n                { name: 'networks', \n                label: 'Social networks',\n                widget: 'list',\n                fields: [\n                        { name: 'title', label: 'Title', widget: 'string' },\n                        { name: 'icon', label: 'Icon', widget: 'string' },\n                        { name: 'color', label: 'Color', widget: 'string' },\n                        { name: 'link', label: 'Link', widget: 'string' },\n                    ]\n                },\n            ]\n        },\n    ]\n}\n\n// send the configuration to Interface\ncreateInterface(config)\n\n```\n\n## Importation\nYou have to set Interface in your router on the client and the server, if you don't set it on your server router, you need to import Interface at least once on the server to build publication and methods.\n\nI advice to import it dynamically.\n\n```javascript\nimport Interface       from 'meteor/mexar:meteor-interface'\n\n\nconst App = appProps =\u003e ( \n    \u003cRouter\u003e\n        \u003cSwitch\u003e\n            \u003cRoute path=\"/admin\" component={Interface} /\u003e // same route as in the config file\n            \u003cRoute path=\"/\" component={MainLayout} /\u003e\n        \u003c/Switch\u003e\n    \u003c/Router\u003e\n)\n```\n\nThe first user to be created is \"admin\" and the password is the same\n\n\n## Widgets\nDifferent widgets are already in Interface to edit and create your databases entries.\n\n| Widget name | Type in database | Displayed in Interface |\n|------------|--------------|------------|\n| string | String | A simple input |\n| multiline | String | A textarea |\n| html | String | A tinymce wysiwyg |\n| boolean | Boolean | A checkbox |\n| image | String | An image picker |\n| date | Date | A date picker |\n| number | Number | A simple input type number |\n| list | Array | Depends if you define some fields or not (check example) |\n\n## Evolutions and issues\nDon't hesitate to tell me if there is some issues I must correct or if you have ideas to improve it.\n\n\n## To Do\n - A rate limiter protection for methods","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmexaar%2Fmeteor-interface","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmexaar%2Fmeteor-interface","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmexaar%2Fmeteor-interface/lists"}