Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
4af7310
feat: adds ai scraping and a bunch of new restaurants
pansar1 Sep 18, 2025
ac656dc
fix: improve UI experience and AI extraction reliability
pansar1 Sep 18, 2025
6db8536
fix(ai-scraper): prevent hallucination and improve PDF text extraction
pansar1 Sep 19, 2025
e7a0194
chore: update dependencies and fix compatibility issues
pansar1 Sep 19, 2025
ec0c123
feat: modernize development environment and infrastructure
pansar1 Sep 19, 2025
2b685fa
fix: align server TypeScript config and add missing browser globals
pansar1 Sep 19, 2025
afe10fe
chore: renovation and improvements
pansar1 Sep 19, 2025
0ffa8fc
feat: shared logger between packages
pansar1 Sep 19, 2025
c3a565c
feat: code cleanup and audit
pansar1 Sep 19, 2025
e81f172
feat: improved docs!
pansar1 Sep 19, 2025
0d6642d
feat: enhance Slack notifications with threading and multi-location s…
pansar1 Sep 22, 2025
a3f89b5
fix: resolve ESLint warnings in notify-slack function
pansar1 Sep 22, 2025
79b1765
fix: correct scraper build output path in package.json
pansar1 Sep 22, 2025
7668c21
feat: improve scraper development logging with pino-pretty
pansar1 Sep 22, 2025
d4cbd29
chore: refactor scraper + small fixes with client
pansar1 Sep 24, 2025
c537b77
chore: fix deprecated
pansar1 Sep 24, 2025
b4adc1b
feat: first steps for mcp-server
pansar1 Sep 24, 2025
d187ba0
feat: websockets for mcp
pansar1 Sep 24, 2025
a92daa8
refactor: break down large PromptPanel into manageable components
pansar1 Sep 29, 2025
20933ad
chore: small fix and readme
pansar1 Dec 16, 2025
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
20 changes: 19 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,22 @@

# Docker files
.dockerignore
Dockerfile
Dockerfile

# Development files
.git
.github
*.md
.env*
.cache
coverage
.turbo
**/*.test.*
**/*.spec.*
.editorconfig
.nvmrc
.prettierrc.js
eslint.config.js
vitest.config.ts
.husky
**/*.map
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

[*.{js,jsx,ts,tsx,json,yaml,yml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[Dockerfile]
indent_style = tab
39 changes: 39 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Contributing to Devolunch

We appreciate any kind of contributions to Devolunch 🤗

## Code / Development

- TypeScript-first codebase (client/server/functions)
- Conventional Commits enforced via a commit-msg hook
- See development details in [docs/development.md](../docs/development.md)

## Forking/Cloning

- Outside contributors: fork the repo and open PRs from your fork
- Org members: branch in-repo and open PRs from branches

## Local Setup

1. Install dependencies
```sh
pnpm install
```
2. Run dev
```sh
pnpm dev
```
3. Optional Docker
```sh
docker-compose up
```

## Functions (Scraper & Slack Notifier)

See their readmes:
- Scraper: apps/functions/scraper/README.md
- Notify Slack: apps/functions/notify-slack/README.md

## Adding restaurants

Add entries to apps/functions/scraper/src/restaurants.ts. See the Scraper README for examples.
79 changes: 79 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: 'Dependency Review'

on:
pull_request:
branches: [main]
paths:
- 'package.json'
- 'pnpm-lock.yaml'
- '**/package.json'

permissions:
contents: read
pull-requests: write

jobs:
dependency-review:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'renovate[bot]'

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Dependency Review
uses: actions/dependency-review-action@v4
with:
fail-on-severity: critical
deny-licenses: GPL-2.0, GPL-3.0
comment-summary-in-pr: always

auto-approve-renovate:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'renovate[bot]'
needs: dependency-review

steps:
- name: Auto-approve Renovate PRs
uses: hmarr/auto-approve-action@v4
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"

security-audit:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'renovate[bot]'

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 10
run_install: false

- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

- name: Install dependencies
run: pnpm install

- name: Security audit
run: pnpm audit
continue-on-error: false
20 changes: 13 additions & 7 deletions .github/workflows/install-and-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 18
node-version: 22

- uses: pnpm/action-setup@v2
- uses: pnpm/action-setup@v4
name: Install pnpm
id: pnpm-install
with:
version: 8
version: 10
run_install: false

- name: Get pnpm store directory
Expand All @@ -29,7 +29,7 @@ jobs:
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- uses: actions/cache@v3
- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
Expand All @@ -49,5 +49,11 @@ jobs:
- name: Run typecheck
run: pnpm typecheck

- name: Run tests
- name: Run tests with coverage
run: pnpm test

- name: Run coverage report
run: pnpm --filter @devolunch/client exec vitest run --coverage

- name: Security audit
run: pnpm audit
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@ lerna-debug.log*

# Zip files created to deploy to Cloud Functions
**/*.zip

# Local scrape output (not for version control)
apps/functions/scraper/scrape.json
21 changes: 21 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
msgFile="$1"
subject="$(head -n1 "$msgFile" | tr -d '\r')"

# Allow merge commits and reverts
case "$subject" in
Merge\ *) exit 0 ;;
Revert\ *) exit 0 ;;
esac

pattern='^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\-\/]+\))?(!)?: .+'

if echo "$subject" | grep -Eq "$pattern"; then
exit 0
fi

echo "\n⛔ Invalid commit message."
echo "Follow Conventional Commits, e.g.:"
echo " feat(server): add health endpoint"
echo " fix(scraper): handle empty PDF"
echo "Got: $subject\n"
exit 1
6 changes: 1 addition & 5 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

pnpm --filter shared build
# Fast, reliable checks before commit
pnpm lint
pnpm typecheck
pnpm test
9 changes: 9 additions & 0 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set -e

echo "husky pre-push: running tests"
pnpm test

echo "husky pre-push: running build"
pnpm build

echo "husky pre-push: OK"
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
inject-workspace-packages=true
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22.14.0
8 changes: 8 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
semi: true,
trailingComma: 'es5',
singleQuote: true,
printWidth: 80,
tabWidth: 2,
useTabs: false,
};
Loading