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": ["foo@bar.com"]
},
"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