Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
node_modules
dist
coverage
.git
.env
*.log
19 changes: 19 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Slack request verification
SLACK_SIGNING_SECRET=

# Local, single-workspace development
SLACK_BOT_TOKEN=

# OAuth distribution (optional for local development)
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
SLACK_STATE_SECRET=replace-with-at-least-32-random-characters
TOKEN_ENCRYPTION_KEY=

# Runtime
DATABASE_URL=postgresql://teamloop:teamloop@localhost:5432/teamloop?schema=public
APP_BASE_URL=http://localhost:3000
PORT=3000
NODE_ENV=development
LOG_LEVEL=info
DEFAULT_TIMEZONE=UTC
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @ayushhagarwal
23 changes: 23 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Bug report
about: Report a reproducible TeamLoop problem
title: "[Bug] "
labels: bug
---

## What happened?

## Steps to reproduce

## Expected behavior

## Environment

- TeamLoop commit/version:
- Node version:
- Deployment method:
- Slack surface and command:

## Safe logs

Remove tokens, workspace identifiers, channel names, and personal data.
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: TeamLoop discussions
url: https://github.com/ayushhagarwal/teamloop/discussions
about: Ask setup questions, share ideas, and show how your team uses TeamLoop.
- name: Security report
url: https://github.com/ayushhagarwal/teamloop/security/advisories/new
about: Privately report a security vulnerability.
14 changes: 14 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Feature request
about: Propose a focused improvement
title: "[Feature] "
labels: enhancement
---

## Team coordination problem

## Proposed Slack experience

## Why this belongs in the current roadmap

## Privacy or scope considerations
24 changes: 24 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
time: "06:00"
timezone: Asia/Kolkata
open-pull-requests-limit: 5
labels:
- dependencies
groups:
development-dependencies:
dependency-type: development
production-dependencies:
dependency-type: production

- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
labels:
- dependencies
16 changes: 16 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## What changed?

## Why?

## Verification

- [ ] `npm run format:check`
- [ ] `npm run lint`
- [ ] `npm run typecheck`
- [ ] `npm test`
- [ ] Manual Slack interaction tested where relevant

## Privacy and scope

- [ ] No secrets or real workspace data included
- [ ] No V1 scope creep
25 changes: 25 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
changelog:
exclude:
labels:
- skip-changelog
categories:
- title: Breaking changes
labels:
- breaking-change
- title: New features
labels:
- enhancement
- feature
- title: Fixes
labels:
- bug
- fix
- title: Documentation
labels:
- documentation
- title: Dependencies
labels:
- dependencies
- title: Other changes
labels:
- "*"
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: CI

on:
push:
branches: [main]
pull_request:

jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run prisma:generate
- run: npm run format:check
- run: npm run lint
- run: npm run typecheck
- run: npm test
- run: npm run build
70 changes: 70 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Release

on:
workflow_dispatch:
inputs:
version:
description: Semantic version without the v prefix, for example 1.1.0
required: true
type: string

permissions:
contents: write

concurrency:
group: release
cancel-in-progress: false

jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Validate release version
env:
VERSION: ${{ inputs.version }}
run: |
if ! echo "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$'; then
echo "Version must be valid semver without a v prefix."
exit 1
fi
PACKAGE_VERSION="$(node -p "require('./package.json').version")"
if [ "$PACKAGE_VERSION" != "$VERSION" ]; then
echo "package.json version $PACKAGE_VERSION does not match $VERSION."
exit 1
fi
if git rev-parse "v$VERSION" >/dev/null 2>&1; then
echo "Tag v$VERSION already exists."
exit 1
fi

- run: npm ci
- run: npm run prisma:generate
- run: npm run format:check
- run: npm run lint
- run: npm run typecheck
- run: npm test
- run: npm run build

- name: Create annotated tag
env:
VERSION: ${{ inputs.version }}
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag -a "v$VERSION" -m "TeamLoop v$VERSION"
git push origin "v$VERSION"

- name: Create GitHub release
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ inputs.version }}
run: gh release create "v$VERSION" --title "TeamLoop v$VERSION" --generate-notes
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
node_modules/
dist/
coverage/
.env
.env.*
!.env.example
*.log
.DS_Store
prisma/dev.db
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
dist
coverage
package-lock.json
6 changes: 6 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 88
}
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Changelog

All notable TeamLoop changes are documented through GitHub Releases and this
file. The project follows [Semantic Versioning](https://semver.org/).

## [1.0.0] - 2026-06-21

### Added

- Six Slack activity commands: lunch, dinner, potluck, weekend run, marathon,
and HYROX.
- Interactive event cards with live RSVPs, preferences, summaries, and
organizer controls.
- Potluck contribution tracking and still-needed categories.
- Scheduled and manual reminders with duplicate-send protection.
- PostgreSQL and Prisma persistence, Slack OAuth distribution, and encrypted
workspace token storage.
- Docker Compose, automated tests, CI, and open-source project documentation.

[1.0.0]: https://github.com/ayushhagarwal/teamloop/releases/tag/v1.0.0
20 changes: 20 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Code of Conduct

## Our pledge

We pledge to make participation in TeamLoop welcoming and harassment-free for
everyone, regardless of background, identity, experience, or ability.

## Expected behavior

Be respectful, assume good intent, give actionable feedback, and keep technical
disagreement focused on the work. Harassment, discrimination, threats, and
publishing another person’s private information are not acceptable.

## Enforcement

Report conduct or safety concerns privately to the repository maintainers.
Maintainers may edit or remove contributions and may temporarily or permanently
restrict participation when behavior harms the community.

This policy is adapted from the Contributor Covenant, version 2.1.
23 changes: 23 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Contributing to TeamLoop

Thanks for helping teams plan things without a 47-message RSVP thread.

## Development workflow

1. Read [docs/local-development.md](docs/local-development.md).
2. Create a focused branch from `main`.
3. Add or update tests with behavior changes.
4. Run `npm run format:check`, `npm run lint`, `npm run typecheck`, and `npm test`.
5. Open a pull request using the repository template.

Keep V1 changes small, privacy-conscious, and Slack-first. New dependencies
should be open source and should not make a paid service mandatory.

## Commit and pull request guidance

- Explain the user problem, not only the code change.
- Include manual Slack testing notes for interaction changes.
- Avoid unrelated formatting or refactors.
- Never include workspace tokens, signing secrets, user data, or production logs.

By participating, you agree to follow the [Code of Conduct](CODE_OF_CONDUCT.md).
21 changes: 21 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
FROM node:20-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY prisma ./prisma
COPY prisma.config.ts ./prisma.config.ts
RUN npm run prisma:generate
COPY tsconfig.json vitest.config.ts eslint.config.js .prettierrc.json ./
COPY src ./src
RUN npm run build

FROM node:20-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY --from=build /app/prisma ./prisma
COPY --from=build /app/prisma.config.ts ./prisma.config.ts
COPY package.json package-lock.json ./
EXPOSE 3000
CMD ["sh", "-c", "npm run prisma:migrate && npm start"]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2026 Ayush Kumar Agarwal
Copyright (c) 2026 Ayush Kumar Agarwal and TeamLoop contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading
Loading