Releases: tutorbookapp/tutorbook
Releases · tutorbookapp/tutorbook
0.34.0
Feature Changes
- Data now comes from a single PostgreSQL database which means:
- Reduced load times when creating/updating/deleting meetings.
- Everything is always up-to-date and in sync with the latest data.
- Invalid phone #s, emails, and URLs cannot be saved.
- Match and meeting IDs are now simply numbers.
- Text-based searches now only filter a single field:
- Search meetings by description;
- Search matches by message;
- Search users by name.
- Admins can now filter by if a user is available or not.
- Featured results are temporarily not supported.
Minor Changes
- Feat(mail/meetings): reword meeting reminders: f9b7cdd
- Feat(styles/theme): lighten first accent color: 9230cce
- Feat(api): replace Firestore with Supabase: #228
- Feat(api): replace Algolia with Supabase: #229
- Refactor: remove unused Zoom integration: #230
- Feat(lib/api/db): add more verbose logging: 17b4303
- Feat(lib/api/error): log entire error stack: b575c53
- Feat(users/search-bar): add "Available" filter chip: 46087e5
- Refactor(model): remove Algolia and Firestore types: #231
- Feat: store
not-
tags in PostgreSQL: #232 - Perf(lib/model): remove
index
to force separate imports: #234 - Feat: replace
Person
withUser
: #233 - Perf(pages/match): remove
/api/people
SWR fetch: 4b0910d - Perf(calendar): remove
usePeople
hook SWR usage: 853bac6 - Perf(api/meetings/create): perform analytics async: e52e541
- Feat(api/db): add text search to meetings/matches: c58a93d
- Feat: specify exactly which field is being searched: ccdbec8
- Feat(calendar): open meeting links in a new tab: 87b7543
- Wip(user/verifications): hide "Featured" switch for now: a1f51e3
- Feat(calendar): show meeting description in dialog: fa3a7a8
- Feat(user/request-form): use message as meeting description: 23066ef
Patches
- Perf: tree-shake by importing data models separately: #224
- Fix(lib/mail/meetings): import missing
Role
type: c5a1250 - Chore(scripts/seed): switch to cookie based auth: 818d2b7
- Fix(lib/firebase/login): await hanging promises: b28aa7f
- Chore(scripts/migrate): slow down
trigger.js
script: be7492b - Feat(db/setup.pgsql): cascade update for foreign keys: febcf32
- Chore(gitignore): use Supabase generated ignore: fdfb05f
- Fix(api/account): fallback to
createUser
ifupdateUser
fails: fea540f - Fix(lib/api/db): properly handle Postgrest errors: 29bca31
- Fix(lib/api/db): specify
onConflict
for PostgreSQL upserts: cd1577a - Refactor(model/error): move
APIError
definition: b735829 - Fix(scripts/migrate): properly set meeting org from match: 18d8f40
- Fix(lib/page): don't import server-side only logger: 780c6ac
- Fix(model): aggregated
people
col can benull
: 93046d9 - Fix(lib/api/db): expect error as array for no results: 9f2f5d5
- Fix(db/setup.pgsql): remove trailing comma from
user_tags
enum: 2ccc9dd - Fix(api/db/user):
getUser
usesview_users
table: 84ca845 - Chore(scripts/migrate): import
phone
package properly: 955be7d - Fix(api/db): return relations after create/update: 30885f9
- Fix(recur-dialog): use dark mode colors: #238
- Fix(api/db/match): paginate
getMatches
results: f5c5db9 - Fix(model): save
roles
after person-to-user convert: 9a825a2
Tests
- Test: setup Cypress for PostgreSQL: #236
Documentation
- Docs(db/setup.pgsql): add closing parenthesis: 8585c31
Dependencies
Credits
Huge thanks to @evanyang1 for helping!
0.33.2
0.33.1
Patches
- Chore: remove unused service worker: 0e9d23a
- Chore(aws): remove unused aws scripts: 70c2322
- Chore: remove unused
next-images
package: cfdfebf - Fix: remove
next-images
image imports: 621ea72 - Feat(mail/meetings): remove book mention in donation emails: 3f8556c
- Fix(mail/meetings): only send donation emails to students: 1c9a4e6
Documentation
- Docs(README): add Supabase shout-out: eb33db4
Dependencies
- Deps: remove unused dev deps: e29ef3a
0.33.0
Feature Changes
- Admins can now edit and vet themselves.
- Parents can select from existing kids when booking.
- Authentication errors should now be less frequent.
Minor Changes
- Feat: add 'Snare Drums' and 'Mallets' subjects: 57b5960
- Fix(user/display): admins can edit their own data: 38b2397
- Feat(api/account): add Segment tracking: c8b6324
- Fix(footer): remove broken footer links: #220
- Feat: use session cookies for auth: #222
- Feat(request-form): parents can select existing kids: #221
Patches
Credits
Huge thanks to @evanyang1 for helping!
0.32.0
Feature Changes
- Users can now cancel meeting drags by clicking "Esc" (#198).
- Students now receive donation emails after meetings (#204).
- Volunteers now receive reminders to make meetings recurring (#163).
- Admins can now show only parents in the users dashboard.
- The calendar dialog now has recur "until" dates and smaller avatars.
- New bookings must now be at least 3 days in advance (#197).
Minor Changes
- Feat: specify that bio will be public info: 8c26943
- Feat: add 24hr and 1hr meeting reminders: 8f9e579
- Feat: add donation and make recurring reminders: 68d9a6a
- Feat(remind/make-recur): polish email wording: 53ec398
- Chore(api): add debug logging for import: a832964
- Feat(scripts/picktime): support recur and parents: 6f323b5
- Feat(api): add actual Winston logging: 63178c7
- Feat(scripts): remove 9am-5pm default availabilities: a9f7709
- Feat(scripts/algolia): add parent tags to idx: d36c3ea
- Feat(calendar/dialog): shrink images to 48px: ed47ff2
- Feat(calendar): show rrule until dates: 411ac48
- Feat(calendar): pressing 'Esc' cancels RND drag: cf2dbff
- Feat(calendar): wait for >10px mvmt before RND drag: b18a81a
- Feat: bookings must be at least 3 days in advance: db4ef50
- Feat(api): only send availability w/in 3-30 days from now: 61b9964
- Feat(user/edit): replace single w/ continuous updates: 2be345f
Patches
- Fix: add bio help text to user edit page: 6008010
- Fix(firebase/functions): ignore build dir: c40dc75
- Fix: use user's name in bio help text: 18b9057
- Fix(remind): synchronize pubsub schedule w/ API: 91f8897
- Feat(firebase/functions): rename to just 'remind': f5104e4
- Fix(avatar): remove now unused image checks: db90a20
- Fix(pages/app): properly type 'APIError' response: 563a23e
- Feat(scripts): add Picktime data utilities: be8acbc
- Fix(calendar): don't trigger drag when creating mtgs: 083ba67
- Fix(calendar): hide RND when viewing item: 207346d
- Ci: add CodeQL analysis for security: 554cee5
Tests
- Test(students): remove flaky nprogress assertion: f5dc484
- Test(users/id): users must book >3 days in advance: 72a92f7
- Test: remove redundant
cy.intercept
: 731395e
Dependencies
- Deps: add 'tiny-async-pool' for scripts: 488756a
- Deps: replace 'tiny-async-pool' with 'bottleneck': 77fde34
- Chore(deps): bump @grpc/grpc-js from 1.1.2 to 1.1.8 in /aws: 48dc3c5
- Chore(deps): bump lodash from 4.17.20 to 4.17.21 in /scripts/backups: 72589fb
- Chore(deps): bump ssri from 6.0.1 to 6.0.2 in /aws: 248d241
- Deps: upgrade Cypress to 7.3.0: b61d783
0.31.0
Feature Changes
- Students and admins can now filter volunteers by availability.
- The search page now only shows volunteers who are available.
- The redesigned user display page now shows volunteer time zones and collects org-required profile info from students.
- Users now have full control over meeting links:
- Volunteers can set default links in their profile page;
- Anyone can update individual meeting links, and;
- Admins can control required org-wide links.
- Admins can now share links to their filters on the users and calendar page.
- Parents can now book and manage meetings for their children.
- Meeting recurrence is now fully editable; no more limitations.
- Meetings can now have more than two people.
- The org analytics page now loads much faster.
Minor Changes
- Feat(user/request-form): add required profile fields: 39bc651
- Perf: only import Recharts modules we actually use: d3c2902
- Feat(locales/match3rd): replace 'send' with 'book': 51804bc
- Feat(user/display): emulate Airbnb styling: 38ddc34
- Feat(user/display): make mobile responsive: 20449a6
- Feat: parents can book meetings for their kids: ecd0b02
- Feat(user/display): show volunteer time zone: 935b738
- Refactor(api): refactor and add background imgs: f61c185
- Fix(user/display): use blurred avatar when background missing: 8237156
- Wip(lib/utils/time): make default timeslot duration 60mins: 0a1c0ac
- Feat(calendar/dialog): support more than two people: bf11845
- Fix(locales/common): make ref placeholder shorter: 49cdb80
- Feat: orgs can configure message placeholder: 0d86c94
- Feat: add account default meeting links: ec3d2c0
- Wip(api/meetings): use account defaults to set venue: 56b8537
- Feat(calendar/dialog): users can edit meeting links: 3a234c4
- Wip(components/page): preconnect to custom Segment CDN: 545c387
- Fix: add parent roles to people tags: 985928b
- Fix(model): follow Material guidelines for date formats: ef1c143
- Feat(search): add availability filters: 30ec251
- Feat(users): add availability filters: febcbce
- Feat: manage UsersQuery state using URL query: 979d421
- Feat: manage MeetingsQuery with URL params: 7426590
- Feat(public/favicon): add circular cropable img: 6f94fe7
- Ci: add action to only run build: b449a93
- Refactor(scripts): move 'firebase' to 'utils' dir: bbee639
- Feat(user/display): show contact info to admins: 1f1f29f
- Feat(lib/mail): use new SMS and email links: edae30a
- Perf: include Segment snippet directly: fbbc45b
- Perf: use recommended Google Fonts workflow: 638361d
- Refactor: remove styled jsx uses: 43de028
- Feat(calendar/dialog): shrink avatars to 40px: 874a76f
- Feat(mail/meetings): support parent bookings for kids: 42deb20
- Feat(recur-select): user can disable recur: d8550be
- Feat(calendar/dialog): show recur in display page: 5908de0
- Feat(calendar/recur-dialog): clicking anywhere on label selects radio: 90aa2c6
- Chore(picktime.js): import as recurring meetings: 60440d9
- Feat(avatar): use genderless fallback photo: c3c3164
- Perf(next.config.js): enable Webpack 5: a1d3711
- Perf(analytics): dynamically import Recharts modules: 4fcb2d8
- Chore(env): remove redundant 'NODE_ENV' vars: e75b470
- Wip: replace material icons font with SVGs: aacc659
- Perf: replace icon fonts with SVGs: #155
- Fix(locales/common): add 'parent' role: bc36309
- Feat(calendar/dialog): enlarge people avatars: 66f9e59
- Feat(mail/components): fallback to genderless avatar: eef4648
- Feat(matches): sync query with URL params: 86e9b45
- Fix(pages/search): only use nprogress for page loading: b3c516f
- Wip(model/user): capitalize first and last name: ffa8630
- Wip: show users who are available at least once: 1d7d16d
- Feat: properly filter users by availability: 6918faf
- Perf: treeshaking for models in meeting: 8a90a5f
- Feat: restore Picktime link support: 9981804
Patches
- Fix(select/select-hint): fallback tooltip shows children: 882918f
- Fix(time-select): show time in user's time zone: 30a58f6
- Fix(model): add parent role and remove handle prop: fc0c02e
- Fix(lib/api/global.d.ts): update 'await-to-js' types: 6461733
- Chore(babel.config.js): remove Recharts plugin for now: fcbc030
- Fix(components/home): update automatic org descriptions: #149
- Refactor(components/home): use 'cn' for classname concatenation: a75e93d
- Fix(user/display): add empty alt attr to backdrop: e950087
- Fix(model/user): set default time zone to PST: adf5930
- Fix(pages/users/id): show subjects from static props: f806b10
- Fix(user/display): don't show empty data fields: 2a017f5
- Fix(model/venue): remove unused venue fields: 07015bc
- Chore(babel.config.js): instrument code during development: 6b22982
- Wip(api/get/users): add note on availability filters: 091386d
- Fix(settings/signup): add React keys to configs: 5d18cb6
- Fix(lib/api/algolia): wait for operations during dev: 47a0828
- Fix(hooks/page): wait for URL params before redirect: 58fb175
- Fix(api/get/meeting-venue): remove console.log calls: 70439eb
- Fix(model): don't add 'tags' prop to search idx: c188cb8
- Chore(package.json): restore color to Cypress output: a6f91d1
- Chore(picktime.js): replace
replace
withreplaceAll
: #153 - Chore(picktime.js): replace map with forEach: #152
- Fix(api/account): update user tags: 1a2feb1
- Fix(matches/row): use match org in URL: 23b60cd
- Fix(api/account): merge all user data: 39dee1d
- Chore(scripts/seed): use unique Algolia prefix: 740e505
- Refactor(home): use new email link utility: fe3acc8
- Fix: don't override default page query state: cfd822a
- Refactor(hooks/social-props): reuse constructor type: c73d8ec
- Fix(page): set Segment snippet script directly: f900aab
- Fix(footer/group): use label as input ID: 04de9ea
- Fix: prevent tabnabbing when opening new tabs: 01bc98e
- Fix(api/people): untruncate child data for parents: e1991bb
- Fix(api/users): skip signup emails for child accounts: 0667868
- Fix(mail): only send to people with emails: d1299c4
- Fix(mail/meetings): omit names of people without emails: c5b1395
- Fix(styles/theme): use unitless values for Sass color hue: 8f174d2
- Refactor(api/get/person): use 'Array#find' instead: 5b71569
- Fix(match/display): add SVG badge icons: 521f42c
- Chore: remove unused 'raw-loader' config: 9c40da7
- Fix(nprogress): don't show for shallow navigation: 652f39e
- Fix(api/users): stop sending emails to nobody: 3f26e38
- Fix(mail/meetings): only include recipients in greeting: dcfc391
- Fix(availability-select): center timeslot icon btn: 86de48c
- ...
0.30.2
Patches
- Fix(pages/500): add custom static 500 error page: 78fd420
- Fix(package.json): remove '--inspect' due to Next.js bug: 7214e31
- Chore(components): add needed 'data-cy' attrs: 9f30cd7
- Fix(api/routes/users/create): fix bug when seeding data: a98c579
- Fix(utils/analytics): don't add 'not-' tags to db: d5477c6
- Fix(locales/common): make nav labels lowercase: 79aef39
- Refactor(utils): rename 'utils' dir to 'scripts': e97c993
- Chore: create Node.js data seeding script: d923c36
- Fix(api): don't log expected 401 errors: 5c9df64
- Fix(api/search): make filter errors more specific: e5aea64
- Fix: replace 'useLayoutEffect' with 'useEffect': 38bbe4e
- Fix(calendar/dialog): sync subject options btwn pgs: 5dec07a
- Fix(styles/material): add 'mdc-chip__icon' hover styling: 45788a7
Tests
- Fix(tests): ensure all tests are passing: ef38acf
- Fix(tests): remove empty test files: 503a837
- Fix(tests/profile): only clear 'input' element: 0dcc123
- Fix(tests): add temp fixes and todo comments: 7701e9c
- Fix(ci): add remind token and Segment API key: 49238a1
- Fix(ci): run all tests before failing workflow: a4c5eb1
- Fix(ci): always collect codecov even if tests fail: d164dd6
- Fix(tests): don't override predefined intercepts: 94c52ad
- Fix(tests/profile): polish flaky snackbar assertions: a9e4ff1
- Fix(tests/users): assert filter sheet open/closed: fcd9b85
- Fix(tests/users/id): generate expected time btns dynamically: 7cf6883
- Fix: use unique Algolia index for each CI job: 72f84df
- Fix(tests): set idx settings before tests: b29e9f6
- Fix(ci): update 'PARALLEL_TOTAL' from 9 to 15: ea489e2
Documentation
- Chore(docs/org-logos): add PAUSD banners: 79e2957
- Docs(README): format badges and banner image: e9d1498
- Docs(README): remove branching workflow docs: 0660e55
Dependencies
0.30.1
0.30.0
Feature Changes
- Admins can now see analytics (e.g. "Total Volunteers") from the org overview page.
- Admins can now filter by tags, answering questions like: "Who isn't matched? Why?"
Minor Changes
- Feat(navigation): replace home/search with overview link: f170bdd
- Wip(model): save analytics totals based on tags: 8e89c17
- Feat(api/routes): track Segment events server-side: c6ed8e2
- Wip(api): add org analytics: 40329de
- Wip(api/orgs/analytics): create analytics endpoint: 75afc77
- Wip(overview): use new analytics endpoint: d0c440f
- Fix: add tag conversion to data models: ccf3e7b
- Chore(utils): add analytics import script: af5adff
- Wip(api/routes): update meeting and match tags: 9e959b5
- Wip(api): update user tags when meetings/matches changed: 5a2539a
- Feat: reuse SearchSelect to create TagSelect component: c1f334c
- Feat(components/users): use new TagSelect component: dda92c5
- Feat(calendar): add meeting tag filters: d1187bc
- Feat(analytics): show nice fallback state: d24f910
Patches
- Fix: remove
babel-plugin-recharts
until v2 support: 300c45e - Fix: use accents2 for header bottom border: 955d695
- Fix(matches): remove double top border when empty: 08bdd96
- Fix(styles/theme): use accents2 for mdc-data-table: 9dddc56
- Chore: remove unused profile/settings styles: c51b64c
- Wip(model): add 'toSegment' conversion methods: 2bbfabe
- Fix(model/person): remove unused 'parent' role: 65a91cb
- Fix(model/analytics): use roles as property keys: 9676974
- Fix(api): index tags as '_tags' by default: 8f8288b
- Chore(mail/campaigns): update 'SEGMENT_KEY' to 'SEGMENT_WRITE_KEY': 60cf206
- Fix(hooks/people): only fetch when match.id present: 6f19a5e
- Fix(pages/api/analytics): handle cases when vals are 0: fc52da7
- Fix(components/users): use new 'UserHitTag' type: 894bb90
- Fix(tests): add tags to Cypress fixtures: f74cd51
- Chore(model/person): rename 'isPerson' param: ea04ad2
- Fix(analytics): use 'date' property instead of 'created': 9b0e2aa
- Fix(components/analytics): scale x-axis w/ time: 993c453
- Fix(analytics): round percent change to one decimal: cca2a9e
- Fix(components/analytics): add '+' sign to positive percents: a23043b
- Fix: properly add 'not-' inverse tags: 139e601
- Chore(api/routes): add note about user tag deletion: 62ee336
- Chore(styles/theme): use color functions for triads: a26cc7b
- Chore(utils/algolia): add tags index: 9af173d
- Fix(calendar/filter-sheet): remove unused styling: cd33827
- Chore(utils/algolia): standardize index CSVs: fd5eae3
- Chore(ref-select): remove unused component: eeb11c8
- Fix(locales/common): add 'no tags' translation: 967d7f2
- Fix(lib/api/analytics): set nums when user leaves/joins org: 6751ca3
- Fix: restrict TagSelect options: 04b2bcb
- Fix(time-select): don't let time buttons text wrap: 881100d
Documentation
- Docs(README): describe in-app analytics: df5b128
- Docs(model/README): remove outdated specs: bd89f17
- Docs(README): add tags descriptions: 54954c3