Tymeslot is open source under the GNU AGPLv3 and actively welcomes contributions. The code you self-host is the same code that runs in production at tymeslot.app β so every improvement benefits both self-hosters and cloud users. Whether you fix a bug, add a theme, improve a translation, or write a test, your work matters.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Tymeslot/tymeslot/llms.txt
Use this file to discover all available pages before exploring further.
Types of contributions
π Bug fixes
Squash reproducible bugs and improve stability. Open an issue first so we can confirm the behaviour before you start.
β¨ New features
Add functionality that benefits users. For large features, open a GitHub Discussion first to align on scope.
π Documentation
Improve guides, API docs, and in-code documentation. Small docs fixes donβt need a prior issue.
π§ͺ Testing
Add test coverage and improve test quality. Every new public context function, LiveView event, and Oban worker must have tests.
π¨ Themes
Create new booking page themes. See the Themes guide for the full architecture and required file structure.
π Integrations
Add support for new calendar or video providers. Follow the provider behaviour pattern and use
Req as the HTTP client.π Performance
Optimise queries, reduce LiveView assigns, improve caching. Include benchmark numbers in your PR description.
π Security
Enhance security measures. Report vulnerabilities privately via tymeslot.app/contact β never in a public issue.
Development setup
Install prerequisites
You need:
- Elixir ~> 1.20 with Erlang/OTP 28.3.3+
- PostgreSQL 14+
- Node.js 18+ (for asset compilation and MJML email templates)
- Git
Configure environment
Copy the example environment file and fill in the required values (database URL, secret key base):For testing OAuth and calendar integrations, youβll also need credentials from:
- Google: Google Cloud Console
- GitHub: GitHub Developer Settings
- Microsoft: Azure App Registration
Install dependencies and set up the database
mix setup installs Elixir and Node.js dependencies, creates and migrates the database, and seeds initial data:Start the development server
Running tests
@moduletag from the approved taxonomy in test/support/tag_taxonomy.ex. Domain tags include :auth, :availability, :bookings, :calendar, :meetings, :notifications, :security, :webhooks, and more. Web layer tags include :live, :controllers, :components. Test type tags include :unit, :integration, :schema, :queries.
Code standards
All four checks must pass before a PR can be merged:mix format to auto-format your code before committing.
Key patterns
Tymeslot follows a domain-driven module structure. Each domain owns its schemas, queries, and logic under one namespace. Repository pattern β allRepo calls live in *_queries.ex files:
Repo.transaction, Repo.rollback, and Repo.preload are permitted in domain context modules.
HEEx comments only β use <%!-- --%> in .heex files and ~H sigils. Never use HTML comments (<!-- -->); they are sent to the browser.
No queries in mount/3 β defer data loading to handle_params/3 to avoid double-loading on LiveView reconnects.
Background jobs via Oban β never use raw spawn/1 or Task.async/1 for async work; always schedule an Oban job.
HTTP client β use Req for all outbound HTTP calls. Do not add :httpoison, :tesla, or :httpc.
Module structure
Signing off commits (DCO)
Tymeslot uses the Developer Certificate of Origin. Every commit must be signed off. Add the sign-off automatically with the-s flag:
Signed-off-by: line to your commit message using your configured Git name and email. Use your real name and a reachable email address. PRs are only merged once all commits are signed off.
To sign off commits you have already made:
Pull request process
Branch naming
Commit messages
Follow Conventional Commits:feat and fix commits. To exclude a commit (e.g. an internal test fix), add a Changelog: skip footer:
PR checklist
Before submitting:-
mix format --check-formattedpasses -
mix testpasses (0 failures) -
mix credo --strictpasses -
mix dialyzerpasses - New functionality includes tests with
@moduletagdeclarations - Documentation is updated if behaviour changes
- Security implications are addressed
- All commits are signed off (
git commit -s)
Reporting issues
Bug reports
Include:- A clear, specific title
- Steps to reproduce
- Expected vs. actual behaviour
- Environment details (OS, Elixir version, Tymeslot version, browser)
- Relevant error logs or screenshots
- A minimal reproduction case if possible
Helping debug issues
If you self-host Tymeslot, you can enable admin alerts to receive structured email reports when something breaks (failed webhooks, calendar sync errors, stuck Oban queues):Contributor licence
By submitting a contribution you agree that:- You have the right to submit it. The work is your original creation or you otherwise have the legal right to submit it.
- You grant a broad licence. You grant Diletta Luna OΓ a perpetual, worldwide, non-exclusive, royalty-free, irrevocable licence to use, reproduce, modify, and distribute your contribution under any licensing terms.
- You retain your copyright. You keep ownership; this is a licence grant, not an assignment.
git commit -s to make the certification.
Licence
Tymeslot Core is distributed under the GNU AGPLv3. Contributions are made available under the same licence. If you run a modified version as a network service, you must make your source changes available under the AGPLv3. The Tymeslot name and logo are trademarks of Diletta Luna OΓ. Forks are welcome but must use their own name.Community and getting help
- GitHub Issues β bug reports and feature requests
- GitHub Discussions β questions, ideas, and design conversations
- Security contact β for private vulnerability reports only
Useful references
- Elixir Getting Started
- Phoenix Guides
- LiveView Guide
- Ecto Guide
- CONTRIBUTING.md β the canonical contributing guide in the repo
- THEME_DEVELOPMENT_GUIDE.md β full theme creation reference