A project management tool.
- Kanban task board with realtime updates
- Timeline view of tasks and projects
- BPMN diagrams
- Business model canvas sheet for project
- Projects grouped by organization
- Project weather like status
- Meeting reports
- Permissions per organization & per project
Demo server: https://latelier-demo.services2.jbl2024.com
Warning: do not store sensitive data, use at your own risk. Data is reset periodically.
Available credentials:
- username: user1@localhost / password: user1
Since v2.9.0, Docker images are available on docker hub: https://hub.docker.com/r/jbl2024/latelier .
A docker-compose.yml is also provided.
This application is built with Meteor framework.
See https://www.meteor.com/install for installation instructions.
The following external dependencies are required:
| Component | Usage | Reference |
|---|---|---|
| GraphicsMagick | Generate thumbnails | http://www.graphicsmagick.org/ |
| Pandoc | Export content to libreoffice & word formats | https://pandoc.org/ |
Copy settings-development.json.sample.json to settings-development.json and update values matching your configuration
Settings:
| Key | Type | Default value | Description |
|---|---|---|---|
| generateFixtures | boolean | false | If true, users fixtures are generated at startup |
| disableAccountCreation | boolean | false | If true account creation is forbidden |
| attachmentsPath | string | /tmp/ | Attachment storage path on fs |
| avatarsPath | string | attachmentsPath | Avatar storage path on fs |
| object | Email settings | ||
| roles.admin | [string] | [] | Users matching emails will have the admin role |
| public.seo.titlePrefix | string | l'atelier | window.title prefix |
| public.sso | object | {} | See below |
| public.emailVerificationNeeded | boolean | false | If false, no verification email is sent |
| public.disableAttachments | boolean | false | If true, attachments are disabled |
| public.tracking | object | {} | See below |
| public.tracking.matomo | object | {} | See https://github.com/AmazingDreams/vue-matomo#usage |
| public.tracking.matomo.enabled | boolean | false | If true, page and search keyword tracking are enabled |
| uploadTransport | string | ddp | http or ddp |
| notificationsPerUser | number | 50 | max number of notifications stored per user |
| users | object | {} | See below |
| digestsRetention | number | 60 | Number of days to keep in digest |
| storage | object | {} | Storage. If empty, fs is used |
| auth | object | {} | See below |
| coedition | object | {} | See below |
email:
| Key | Type | Default value | Description |
|---|---|---|---|
| from | string | noreply@localhost | From email when sending mail |
| prefix | string | Subject prefix |
users:
| Key | Type | Default value | Description |
|---|---|---|---|
| search | string ("admin", "all") | all | Who can search existing users |
| invite | string ("admin", "all") | all | Who can invite people |
sso:
| Key | Type | Default value | Description |
|---|---|---|---|
| enabled | boolean | false | If true, sso is enabled |
| string | null | email header to match user | |
| logoutUrl | string | null | Logout url |
storage:
| Key | Type | Default value | Description |
|---|---|---|---|
| type | string ("s3") | Storage type | |
| migrateFromFS | boolean | false | If true, files are moved from FS to storage system at startup (make sure you backup your data before!) |
| s3 | object | {} | s3 options |
s3
| Key | Type | Default value | Description |
|---|---|---|---|
| endpoint | string | Storage url (optional) | |
| key | string | key | |
| secret | string | secret | |
| region | string | region | |
| bucket | string | bucket |
auth:
| Key | Type | Default value | Description |
|---|---|---|---|
| oauth2 | object | {} | See below |
oauth2:
| Key | Type | Default value | Description |
|---|---|---|---|
| enabled | boolean | false | If true, oauth2 is enabled |
| title | string | OAuth2 | Button title |
| idMap | string | id map | |
| usernameMap | string | preferred_username | |
| fullnameMap | string | given_name | |
| emailMap | string | ||
| clientId | string | ||
| secret | string | " | |
| serverUrl | string | /auth | |
| authEndpoint | string | /realms//protocol/openid-connect/auth | |
| userInfoEndpoint | string | /realms//protocol/openid-connect/userinfo | |
| tokenEndpoint | string | /realms//protocol/openid-connect/token | |
| logoutUrl | string | /realms/l/protocol/openid-connect/logout | |
| logoutRedirectParameter | string | redirect_uri | |
| idTokenWhitelistFields | string | [] |
Note: tested only with keycloak.
coedition:
| Key | Type | Default value | Description |
|---|---|---|---|
| steps | integer | 500 | Number of steps to keep for coedit collab feature |
| daysToKeep | integer | 3 | previous edition steps are removed after daysToKeep |
Example:
{
"generateFixtures": false,
"disableAccountCreation": false,
"attachmentsPath": "/tmp/attachments/",
"notificationsPerUser": 50,
"users": {
"search": "admin",
"invite": "admin"
},
"email": {
"from": "noreply@localhost"
},
"roles": {
"admin": ["[email protected]"]
},
"public": {
"emailVerificationNeeded": false,
"seo": {
"titlePrefix": "l'atelier"
},
"sso": {
"enabled": true,
"email": "header-email"
},
"uploadTransport": "ddp"
}
}
If generateFixtures parameter is set to true, 50 users are created at startup (if user count is <= 2).
Default password for generated users is password.
meteor npm install
npm start
A Dockerfile and a docker-compose are provided to start a development environment.
$ docker-compose --file docker-compose.dev.yml up
will start in dev mode (autorestart, no production build):
- the app container with node & meteor
- mongodb (latest)
- mongoexpress (http://localhost:8081)
- maildev (http://localhost:1080)
When all containers are running, open another terminal to start meteor application:
$ docker-compose --file docker-compose.dev.yml exec app npm run start-dev
After a few minutes, the app will be available at http://localhost
Note: do not forget to create a settings-development.json file.
Apache License 2.0