Skip to content

Releases: tutorbookapp/tutorbook

0.34.0

05 Aug 15:45
Compare
Choose a tag to compare

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 with User: #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 if updateUser 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 be null: 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 uses view_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

  • Deps: upgrade Supabase CLI to 0.5.0: 9bf897b
  • Deps: upgrade dependencies: #237

Credits

Huge thanks to @evanyang1 for helping!

0.33.2

08 Jun 00:15
Compare
Choose a tag to compare

Patches

  • Fix(mail/meetings): update donation email text: 79ebba2

0.33.1

07 Jun 23:50
Compare
Choose a tag to compare

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

03 Jun 04:25
Compare
Choose a tag to compare

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

  • Wip(api/remind): add debug logging: df9b59e
  • Fix(user): clicking back now works consistently: #219

Credits

Huge thanks to @evanyang1 for helping!

0.32.0

17 May 04:04
Compare
Choose a tag to compare

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

12 May 02:53
Compare
Choose a tag to compare

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:
  • 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 with replaceAll: #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
  • ...
Read more

0.30.2

19 Mar 05:11
Compare
Choose a tag to compare

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

  • Chore(deps): upgrade Cypress to 6.7.1: 58e7bd0
  • Chore(deps): upgrade Next.js to 10.0.9: cd03b5f
  • Chore(deps): upgrade 'await-to-js' to 3.0.0: 940a966
  • Chore(deps): upgrade Cypress to 6.8.0: 14c3590
  • Chore(deps): remove unusable 'ts-node': c4841dc

0.30.1

15 Mar 04:54
Compare
Choose a tag to compare

Patches

  • Fix(model/query/meetings): add tags to URL conversion: 3bf5ae3

0.30.0

15 Mar 04:31
Compare
Choose a tag to compare

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

Dependencies

  • Chore(deps): add recharts for analytics visualizations: ab974b1
  • Chore(deps): upgrade server-side Segment analytics lib: e34fd27
  • Chore(deps): install extraneous deps: d15b270

0.29.4

12 Mar 20:57
Compare
Choose a tag to compare

Patches

  • Fix(public/segment.js): use 'segment.tutorbook.org' CDN proxy: f17f324