{"id":22489746,"url":"https://github.com/locokit/locokit","last_synced_at":"2025-08-02T22:31:06.468Z","repository":{"id":37398623,"uuid":"423815787","full_name":"locokit/locokit","owner":"locokit","description":"The Low Code Kit repository","archived":false,"fork":false,"pushed_at":"2024-12-02T17:20:12.000Z","size":115207,"stargazers_count":66,"open_issues_count":114,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-02T18:24:31.774Z","etag":null,"topics":["airtable","locokit","low-code","nocode"],"latest_commit_sha":null,"homepage":"https://locokit.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/locokit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-02T11:24:09.000Z","updated_at":"2024-11-27T10:38:34.000Z","dependencies_parsed_at":"2023-11-23T17:23:13.455Z","dependency_job_id":"5aa0afc7-141c-4306-8f30-d26cc073b080","html_url":"https://github.com/locokit/locokit","commit_stats":null,"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/locokit%2Flocokit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/locokit%2Flocokit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/locokit%2Flocokit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/locokit%2Flocokit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/locokit","download_url":"https://codeload.github.com/locokit/locokit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228500455,"owners_count":17930073,"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":["airtable","locokit","low-code","nocode"],"created_at":"2024-12-06T17:20:35.037Z","updated_at":"2024-12-06T17:23:01.981Z","avatar_url":"https://github.com/locokit.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# LocoKit - the Low-Code Kit Platform\n\n![LocoKit logo](docs/public/logo.png)\n\nWelcome on the monorepo of [LocoKit, aka Low-Code Kit platform](https://locokit.io).\n\nLocoKit is an AirTable alternative, providing database management as a spreadsheet and an app builder.\n\nThere is the backend part (`api` directory),\nthe frontend (`front` directory),\nthe documentation (`docs`)\nand several packages. (only `glossary` actually).\n\n## Getting started\n\nBefore all, you need to use the version of node indicates in `.nvmrc`:\n\n```bash\nnvm install # only if node version is not installed\nnvm use\n```\n\nInitialize node modules:\n\nFor each directory (`api`, `front`, `docs`, `packages/glossary`), you need to:\n\n```bash\nnpm ci # install deps\n```\n\nFrom here you need [docker](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) and [docker-compose](https://docs.docker.com/compose/install/) in recent version.\n\nIn the `front` directory, \nyou need to create a `.env` file from the `.env.dist`. Then in `public`, you also need to create a `config.js` file from the `config.js.dist`. [View the full config reference](#customize-configuration).\n```\ncp .env.dist .env\ncp public/config.js.dist public/config.js\n```\n\nIn the `api` directory,\nsame thing, but with the `.env.example` file.\n```\ncp .env.example .env\n```\n\n```bash\ndocker-compose up # you can add -d to use the daemon option of docker-compose\n\n# in another terminal\nnpm ci\nnpm run migrate:latest\nnpm run seed:run\nnpm run start\n```\n\nThe default user created is `superadmin@locokit.io` with password `locokit`.\n\n## API\n\n\n### Swagger\n\nA swagger is available on http://localhost:3030/swagger/ once the project has started.\n\nThis is made with [RapiDoc](https://mrin9.github.io/RapiDoc/).\n\n### Restore a dump\n\nYou can restore any staging / production dump you have access to by putting them\nin the `dumps` directory.\n\nThis directory is shared with the postgres dockers. (`lck-db` and `lck-db-test`)\n\nFor restoring a dump :\n\n```bash\ndocker exec -it lck-db bash\npg_restore --no-owner --clean --create -d public -U postgres -W /dumps/your_dump # you'll have to enter the password yourPostgresPassword\n```\n\n### Scaffolding\n\nFeathers has a powerful command line interface. Here are a few things it can do:\n\n```\n$ npm install -g @feathersjs/cli          # Install Feathers CLI\n\n$ feathers generate service               # Generate a new Service\n$ feathers generate hook                  # Generate a new Hook\n$ feathers help                           # Show all commands\n```\n\n## Front end\n### Configuration\n\n**`public/config.js`**\n\nThis file contains a `LCK_SETTINGS` variable\nallowing the app to know some settings like the API URL, the localStorage key, ...\n\n```js\nconst LCK_SETTINGS = {\n  API_URL: 'http://localhost:3030',\n  LOCALSTORAGE_KEY: 'lck-auth',\n  SENTRY_DSN: '', // here you can set your SENTRY_DSN, please check sentry documentation\n  SENTRY_ENV: 'local',\n  STORAGE_PATH: 'http://localhost:8000/storage'\n}\n```\n\nThis file is used at runtime, so you could customise it\nwhen you deploy the app.\n\nYou have an example in the `public/config.js.dist` ready to be used\nwith the `lck-api` project.\nCopy paste this file in a new `public/config.js` and it should do the trick.\n\n**`.env`**\n\nSame for this file, you'll find an example at the root in `.env.dist` file.\n\nThis file contains more global variables used at compilation time.\n\nAs you can't change these vars after compilation time,\nwe have made a special `index.html` file to be a template when the build is done.\nYou'll find after build in the `dist/index-template.html` file.\nThis file contains the `.env` variables in an template-handlebar syntax.\n\nThis allows you to compile only the html file if you need\nto customize these vars before deploy.\nWe've made a node script for that, in `scripts/compileTemplate.js`\nthat you can trigger with `npm run build:html`.\nIf you use it in a CI environment,\nyou could give to your CI some env vars that will be injected in your html file.\n\n### Compiles and hot-reloads for development\n\n```bash\nnpm run serve\n```\n\n### Compiles and minifies for production\n\n```bash\nnpm run build\n```\n\nYou'll get an `index-template.html` file in the `dist` directory.\nYou can use the `npm run build:html` if you want to customize the title or other vars.\n\n### Run your unit tests\n\n* only stories of the storybook\n\n```bash\nnpm run test:unit-stories\n```\n\n* run stories and update imageshots\n\n```bash\nnpm run test:update-imageshot\n```\n\n* except stories\n\n```bash\nnpm run test:unit-src\n```\n\n* all unit tests\n\n```bash\nnpm run test:unit\n```\n\n### Lints and fixes files\n\n```bash\nnpm run lint\n```\n\n### Storybook\n\n```bash\nnpm run storybook:serve\n```\n\nEvery story in the project is snapshoted + imageshoted.\n\nWe use the addon storyshot of storybook, for both snap and images.\n\nSometimes, an imageshot need to wait for an element, wait for its DOM injection.\n\nSometimes too, there are animations that slow the process of taking the screenshot.\n\nFor every story you write, you can add an arg `waitForSelector` that would be a CSS selector,\nand we use it to tell puppeteer (used under the hood by storyshot for imageshot)\nto wait the DOM element with the CSS selector you define is really in the DOM.\n\nWe encounter lots of issues on Mac OS, so if you use this OS,\ndon't worry if your CI is broken. Ask a developer with a Linux OS to update your shots.\n\nThe storybook of the master branch is available on http://lck-storybook.surge.sh/.\n\n\nYou can write your own configuration settings here,\nwhen you deploy this front, you will have to override these settings\nto match your environement configuration.\n\n\n## Git Commit Messages\n\nInspired and copied from https://github.com/Schneegans/dynamic-badges-action#git-commit-messages\n\nCommits should start with a Capital letter and should be written in present tense (e.g. __:tada: Add cool new feature__ instead of __:tada: Added cool new feature__).\nYou should also start your commit message with **one** applicable emoji. This does not only look great but also makes you rethink what to add to a commit. Make many but small commits!\n\nEmoji | Description\n------|------------\n:tada: `:tada:` | When you added a cool new feature.\n:sparkles: `:sparkles:` | When you added a little but necessary feature.\n:wrench: `:wrench:` | When you refactored / improved a small piece of code.\n:hammer: `:hammer:` | When you refactored / improved large parts of the code.\n:art: `:art:` | When you improved / added assets like themes.\n:rocket: `:rocket:` | When you improved performance.\n:memo: `:memo:` | When you wrote documentation.\n:beetle: `:beetle:` | When you fixed a bug.\n:fire: `:fire:` | When you removed something.\n:truck: `:truck:` | When you moved / renamed something.\n\n## Contribute\n\nIf you encounter a bug, please submit an issue.\n\nIf you want to contribute to the code,\nfirst ask to the team where to begin (with an issue).\n\n1. create an issue, or be assigned on an issue\n2. put the issue in the \"Doing\" column of the board\n3. create a local branch prefixed by the issue's id (`23-add-of-a-new-feature` or `23-fix-this-horrible-bug`)\n4. add some tests / stories for the code you're writing\n5. when your work is ok for you, push it to the repo\n6. create a MR\n7. check the CI is ok. CD is configured too, you could check your storybook \u0026 on surge.sh to see if it's working (this will help us for the review process)\n8. if all is green, put your issue in \"To be reviewed\" column of the board\n9. affect your MR to someone in the team to be reviewed\n10. maybe you'll have to take in consideration some aspects of your code, so discuss and take in consideration the remarks (restart to 4.)\n11. if review is ok, the reviewer will approve it\n12. now, you can merge it !!!... Congratulations !\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flocokit%2Flocokit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flocokit%2Flocokit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flocokit%2Flocokit/lists"}