Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collections #13

Closed
IgnisDa opened this issue May 5, 2023 · 0 comments · Fixed by #14
Closed

Collections #13

IgnisDa opened this issue May 5, 2023 · 0 comments · Fixed by #14

Comments

@IgnisDa
Copy link
Owner

IgnisDa commented May 5, 2023

Media items can be put into collections for easier organization. Similar to functionality of "shelves" in Goodreads etc.

IgnisDa added a commit that referenced this issue Jul 26, 2024
* feat(database): add name column to access link

* feat(backend): allow setting name for access links

* feat(frontend): display names for access links

* feat(frontend): allow redirecting using access links
IgnisDa added a commit that referenced this issue Sep 29, 2024
* feat(frontend): automatically scroll to next element

* feat(frontend): handle opened tabs correctly

* Revert "Remove landing (#904)"

This reverts commit 182e4e7.

* chore: remove docs application

* Allow setting time on seen entries manually (#10)

* feat(database): add column for manual time spent

* feat(backend): allow editing time spent

* feat(frontend): allow setting manual time spent on seen entries

* feat(frontend): read default value

* feat(frontend): make manual_time_spent field a decimal

* chore(frontend): adjust to new gql schema

* feat(frontend): display manual time if present

* fix(frontend): cap the max scale

* fix(backend): add validation for pro key

* Pro changes (#9)

* feat(landing): basic paypal btns

* feat(landing): render buttons

* feat(landing): get paypal working

* refactor(landing): extract currency code

* chore(docs): remove useless files

* feat(backend): handle pro key

* feat(backend): update metadata of keys when verifying

* build(backend): add semver deps

* feat(backend): display when key expires

* fix(backend): bail only after tracing logs

* refactor(backend): do not destructure response

* feat(backend): start implementing logic for pro key validation

* chore(landing): remove files

* feat(landing): add supercharged collections pic

* feat(backend): start implementing key expiry

* feat(backend): new strategy for verifying pro key

* feat(backend): polish verification completely

* fix(backend): change condition to OR

* fix(backend): better comparisons

* feat(backend): do not serialize null params

* build(backend): remove semver deps

* feat(backend): remove dependency on custom version in key meta

* fix(backend): make correct use of variables

* feat(backend): do not log everything

* chore(backend): bail with correct error

* build(landing): add paddle deps

* feat(landing): add paddle btns

* build(landing): remove paypal deps

* feat(landing): bring back trial period

* feat(landing): remove discussions etc

* feat(landing): add information about renewal

* feat(landing): add additional information

* ci: move landing page build and deploy to separate workflow

* feat(backend): do not update key's metadata

* feat(backend): better logging.

* feat(backend): handle when no meta

* feat(landing): change svgs for contact section

* fix(backend): handle empty metadata correctly

* chore(backend): log expiry before check

* feat(landing): add to interface

* feat(landing): add basic information json

* feat(landing): get back old page

* chore(landing): edit out cursor

* ci: add env to action workflow

* feat(landing): add validation for paddle

* feat(landing): add title

* feat(landing): add id to each feature

* feat(landing): new screenshot incorporated

* chore(frontend): add dev comment

* chore(frontend): narrow if check

* feat(landing): change prices

* feat(backend): return early if pro key is invalid

* refactor(backend): change name of function

* ci: remove ref to an env variable

* ci(landing): upgrade deps

* fix(frontend): correct import

* New branch (#11)

* chore(frontend): add scroll margin when scrolling to next exercise

* feat(landing): add info about trial

* chore(landing): order of sentences

* Access links (#12)

* feat(database): add models for access links

* feat(database): add column to store tokens in access links

* feat(database): new column for access link table

* feat(backend): new entity for access link

* feat(backend): add empty impl for creating access link

* feat(backend): automatically generate id for access links

* feat(backend): add impl for creating access links

* feat(database): separate column for storing whether link is invalid

* Revert "feat(database): separate column for storing whether link is invalid"

This reverts commit 7371b26d861f169d8b05861e02991d7f5b994fb8.

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* feat(backend): empty mutation to process an access link

* feat(backend): handle error states for processing access links

* feat(backend): encode nullable access link id in token

* feat(backend): complete implementation of processing access links

* fix(database): make times used an array

* feat(backend): resolver to get all user access tokens

* feat(frontend): get user access links data

* feat(frontend): simple api route for sharing access links

* ci: add route for sharing

* feat(frontend): handle case when access link is invalid

* feat(frontend): return a valid toast instead of json response

* refactor(frontend): display error directly

* feat(frontend): basic tab for creating access link

* fix(backend): order access links by when they were created

* feat(frontend): display access link details

* feat(backend): mutation to revoke an access link

* feat(frontend): allow revoking access links

* feat(frontend): display when link has been revoked

* feat(frontend): allow creating access links

* chore(frontend): increase primary details font size

* feat(frontend): use function from utils

* fix(frontend): use dayjs lib for expiry

* feat(backend): start with function to determine whether mutation allowed

* feat(backend): complete function to determine if token is allowed to performed mutation

* feat(database): add new column for access token validity

* feat(backend): add token validity

* feat(frontend): add new field to form

* feat(backend): return number of days token is valid for

* feat(frontend): adapt to new gql schema

* fix(frontend): add a minimum and maximum threshold for access token

* build(frontend): add `jwt-decode` deps

* feat(frontend): determine whether it is an access link session

* feat(frontend): display indication when in readonly mode

* feat(frontend): correct text in tooltip

* feat(landing): add sharing image

* feat(landing): add info about sharing feature

* feat(backend): respect token revoked status

* feat(backend): cleanup job made correct

* chore(database,backend): remove access link validity field

* fix(backend): handle revoked access links correctly

* feat(frontend): remove validity column from access links

* feat(frontend): use lock icon for revoke action

Also change order of imports

* feat(frontend): no mutation is not recoverable

* chore(frontend): do an import

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Access links improvements (#13)

* feat(database): add name column to access link

* feat(backend): allow setting name for access links

* feat(frontend): display names for access links

* feat(frontend): allow redirecting using access links

* fix(backend): throw error when auth token is deleted

* Mutating access links (#14)

* feat(database): migration to add new column to access link

* feat(backend): allow storing whether access link can mutation

* feat(frontend): allow creating access links which can mutate

* feat(backend): obey new variables

* fix(frontend): change text in btn

* refactor(backend): make auth check flow much simpler

* fix(frontend): remove extra space

* fix(frontend): handle current workout a bit differently

* feat(frontend): access link improvements

* feat(landing): add links to demo page

* Workout templates (#15)

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(database): remove workout comment from top level

* feat(backend): adapt to new database schema

* chore(frontend): adapt to new gql schema

* fix(frontend): duplicate comment as well

* build: update lockfile

* feat(database): add migration to create workout template

* feat(backend): generate entities for workout templates

* refactor(backend): generate default argon

* fix(frontend): hide menu entry when creating template

* refactor(backend): to account for new workout templates

* fix(backend): skip correct input

* chore(frontend): adapt to new gql schema

* feat(*): use better types

* fix(frontend): remove heading

* fix(frontend): add description to input box

* feat(database): make the user_id non nullable

* feat(backend): add types to fields

* feat(backend): generate ids for workout templates

* feat(backend): make fields nullable

* chore(frontend): adapt to new gql schema

* fix(frontend): change name of btn

* feat(frontend): add conditionals

* chore(frontend): remove title

* chore(frontend): change page title

* fix(frontend): send workout create event only when it actually happens

* feat(backend): basic mutation to create workout template

* refactor(frontend): use functions

* feat(frontend): add template create action

* feat(frontend): adapt to new templates

* fix(frontend): add more clarifying text

* feat(backend): start impl for creating workout template

* feat(backend): make more fields nullanble

* feat(*): change lot to be non nullable

* feat(backend): store lot of exercise

* feat(backend): insert workout template into database

* fix(backend): do not serialize nulls

* refactor(frontend): change name of module

* feat(frontend): start adjusting for new endpoint

* feat(frontend): duplicate workout accurately

* feat(database): change order of migrations

* refactor(database): change name of migration

* feat(database): migration for new columns for workout

* fix(database): make created_on non nullable

* fix(database): order of column creation

* feat(backend): resolver to get workout template details

* feat(graphql): extract information into fragment

* fix(frontend): redirect to template

* fix(frontend): invalidate query correctly

* feat(graphql): add new gql query

* feat(backend): allow setting template id

* fix(frontend): extract type

* feat(frontend): set template id

* feat(frontend): get workout template details

* feat(frontend): hide done on when not applicable

* refactor(frontend): remove duplicated code

* fix(frontend): show done on always

* feat(backend): display when workout template was created

* fix(frontend): display when workout was done

* fix(frontend): no conditional

* feat(frontend): enhance cookie for storing workout

* feat(backend): allow create or update

* feat(frontend): use new mutation document

* feat(backend): allow getting id from frontend

* feat(backend): change name of field

* fix(frontend): start to implement update workout template

* feat(frontend): get the duplicate button working

* feat(frontend): get edit btn working

* feat(frontend): add a start workout btn

* refactor(frontend): fn to perform decision

* fix(frontend): change word

* feat(frontend): change order of btns

* fix(backend): remove useless extra line

* feat(backend): allow deleting workout templates

* fix(frontend): allow deleting templates

* feat(frontend): allow deleting workout templates

* fix(frontend): change text when disabled

* feat(frontend): make workout list page dynamic

* fix(frontend): display dynamic title

* feat(frontend): make page more dynamic

* feat(frontend): make page more accepting to changes

* fix(frontend): old entity model

* feat(backend): add new template field

* feat(frontend): make stuff plural

* feat(database): add new preference

* build(backend): update unkey version

* feat(backend): use upgraded unkey version

* feat(backend): resolver to get user workout templates

* feat(frontend): allow displaying templates

* feat(frontend): redirect to correct page

* fix(frontend): inline invariant

* refactor(backend): change name of query

* chore(frontend): adapt to new gql schema

* fix(frontend): make plural

* fix(frontend): more changes

* feat(frontend): display visibility of template

* feat(database): remove `is_demo` column from user

* feat(backend): adapt to new gql schema

* feat(frontend): adapt to new gql schema

* feat(database): migrate to add is_demo to access_link

* feat(backend): change how we sign jwts

* feat(frontend): adapt to new auth token schema

* fix(frontend): display when demo access link

* fix(frontend): add more to schema

* fix(frontend): associate with correct template

* feat(landing): add info about workout templates

* Add entities to collections (#16)

* refactor(backend): move location of modules

* feat(database): migration to allow adding workout to collection

* feat(backend): generate new columns for entities

* feat(backend): allow adding workouts to collections

* feat(backend): return collections for workouts

* feat(backend): add new entity lot

* feat(frontend): allow adding workouts to collections

* feat(frontend): menu item to add workout to collection

* fix(backend): do not associate user with workouts

* perf(frontend): do not fetch entire history to add exercise to workout

* feat(frontend): display workout display item for collection

* fix(frontend): move workout name to grp

* fix(frontend): add import

* feat(database): add migration to add new column to collection to entity

* refactor(database): add indices using for loop

* fix(frontend): set correct repeated from ID

* fix(frontend): adapt interval to new api

* fix(frontend): remove `useEffect` usage

* feat(backend): generate new column stuff

* feat(backend): add new entity type

* feat(backend): allow adding workout template to collection

* feat(backend): return collections for workout templates

* feat(frontend): adapt to new gql schema

* chore(backend): add clippy ignore

* fix(backend): return collection contents

* feat(frontend): display workout template in collections

* feat(database): add constraint for entity columns

* feat(database): add column for generated entity_id

* feat(backend): add new column to collection_to_entity

* refactor(backend): move entity_lot to definitions

* refactor(backend): remove duplicated stuff

* feat(frontend): remove pro required component

* chore(backend): remove conflicting implementations

* fix(frontend): add correct import

* build: add landing to workspaces

* Genre display (#18)

* refactor(frontend): extract genre display to component

* feat(frontend): hardcode image in genre display

* feat(frontend): add info about ryot pro gated feature

* chore(*): remove refs to features page

* feat(frontend): display genre images

* perf(frontend): fetching images for collections

* feat(frontend): display genre images

* Website (#17)

* feat(website): add initial website

* chore(website): remove prefix for tailwind

* feat(website): hardcode prices for both types of product

* fix(website): correct price id for cloud monthly

* feat(website): load paddle client token and prices using env variables

* feat(frontend): add btns to do purchases

* fix(database): allow migrating for empty databases

* fix(frontend): add import from paddle

* refactor(website): new module for stuff

* feat(website): move price schema to config

* build(website): add drizzle deps

* feat(website): start adding database

* feat(website): migrate app on startup

* feat(website): add basic customer model

* ci(website): add dockerfile

* ci: update path to copy from

* ci: change user running container

* ci: copy migration files

* fix(website): move stuff to root layout

* fix(website): specify smaller favicon as well

* feat(website): add basic sign up form

* feat(website): add more dependencies

* ci: add landing page to workspaces

* build(website): add workspace deps

* build(website): add ufo deps

* feat(website): allow creating user with username/password

* feat(website): make email unique

* feat(website): remove all refs to customer password

* feat(website): add column for storing `created_on`

* build(website): add oidc deps

* chore(website): make oidc issue id unique

* feat(website): allow signing up with google

* chore(website): run formatter on shadcn components

* refactor(website): do not parse prices in the loader

* fix(frontend): do not return inserted id

* refactor(website): move auth to different page

* feat(website): redirect after register

* feat(website): on conflict do nothing

* feat(website): set auth cookie when login works

* feat(website): redirect if not logged in

* build(website): add sonner deps

* feat(website): show toast when buying without login

* feat(website): function to get product and plan type

* feat(website): determine correct product and plan type from price id

* refactor(website): function to extract userId

* feat(website): update customer details after payment complete

* feat(website): return details about customer

* ci(website): set the node env for the running server

* feat(website): enable query logger in development mode

* build(website): add dayjs deps

* feat(website): set expiry date when purchase has been processed

* build(website): add gql request deps

* feat(website): create user for cloud version

* build(website): add unkey deps

* feat(website): create unkey api keys

* chore(website): order of imports

* feat(website): add config variables for mailer

* ci: hoist file gorup

* feat(transactional): add transactional lib

* ci: some routine changes

* build(transactional): allow building templates

* ci(website): update typescript config

* ci(transactional): copy files are being built

* ci: add transactional emails

* feat(transactional): use better template for generic email

* build(backend): add askama deps

* ci(transactional): do not build plaintext templates

* feat(backend): send notification using generic template

* feat(transactional): extract into layout

* refactor(transactional): extract props

* ci: copy email templates before building

* ci: change order of copying files

* build(website): add deps

* build(website): add more dep

* build(website): add more dep

* build(website): add more dep

* feat(website): update paddle customer id

* feat(website): add unique index to product type and email

* Revert "feat(website): add unique index to product type and email"

This reverts commit ce0abea9ef432ba7f8fcd0265d287691baef659d.

* ci(website): generate route file

* feat(frontend): redirect using remix routes

* feat(transactional): basic purchase complete email

* build(website): add emailjs deps

* build(website): add transactional emails as dep

* feat(website): allow sending text emails

* feat(website): start with sending emails

* build(website): add nodemailer

* feat(website): use nodemailer for email sending

* chore(website): remove useless dep

* feat(website): add name to sent email

* feat(website): allow sending email once purchase is complete

* feat(transactional): display details for self hosted plan

* build(transactional): add ts-utils dep

* feat(transactional): handle showing credentials for cloud plan

* feat(website): send info about pro access in purchase complete email

* feat(transactional): add more info about google sign in

* build(website): add paddle sdk deps

* feat(website): add new paddle token

* refactor(website): do not use fetcher

* feat(website): store first transaction id in database

* feat(website): do processing for paddle in backend

* build(website): add new deps

* fix(*): change field name to renewal

* chore(*): change name of field

* chore(website): make the expiry field a date

* fix(website): more variable renames

* chore(website): do not clone request again

* feat(transactional): email template for sending login codes

* feat(transactional): add subject to emails

* fix(website): use coded subject

* build(website): add otp input

* build(website): remove caret from versions

* feat(website): add otp input

* chore(website): add new tailwind classes

* build(website): add ttlcache deps

* feat(website): add inputs for login code

* feat(website): support for login codes

* build(website): add tabler icons dep

* feat(website): change the fonts being used

* feat(website): complete basic landing page

* fix(backend): set is pro to true

* feat(website): add cta image

* feat(website): add images to landing page

* feat(website): add a demo button

* feat(website): add new section for ease of use

* feat(website): new section for display

* chore(website): change order of imports

* feat(website): better community section

* feat(website): add testimonial

* feat(website): add umami script

* fix(website): add scroll behavior to website

* fix(website): better subtitle

* feat(website): add shadcn tooltip

* feat(website): add ids to all sections

* refactor(website): remove duplicated elements

* feat(website): display prices for stuff

* feat(website): add more content to pricing section

* fix(website): change size of btn

* feat(website): add info about type selected

* chore(website): add env file

* refactor(website): change name of paths

* feat(website): add action to index route

* feat(website): allow logging in with email

* feat(website): allow logging in with oidc

* feat(website): store when user is logged in

* feat(website): redirect correctly

* feat(transactional): render email conditionally

* lots of changes

* chore(transactional): return fragment instead of `null`

* feat(website): extract layout to header

* feat(website): add better contrast between elements

* feat(website): add new page for me

* fix(website): change css

* fix(website): change link when logged in

* feat(website): display icon in title

* feat(website): show btn if already logged in

* feat(website): add link to terms

* chore(website): change order of header links

* feat(website): add terms and condiitions page

* build(website): add tailwind typography to deps

* feat(website): add terms page

* chore(website): order of imports

* chore: remove `landing` app

* feat(website): extract pricing section into component

* feat(website): allow sending pricing information

* feat(website): redirect if logged out

* feat(website): allow users to buy using `/me` page

* feat(website): add shadcn card component

* feat(website): display plan details after purchase complete

* fix(website): better layout

* fix(website): do umami on incorrect domains

* fix(website): image was getting cut off

* feat(website): add btn for my account

* fix(website): display renewal status

* fix(website): do not display renew on if it can not be renewed

* ci(website): set host for image

* feat(website): add carousel shadcn component

* build(website): add autoplay deps

* feat(website): add carousel for displaying showcase

* fix(frontend): set definite width

* feat(website): add more features

* fix(website): remove next and previous btn

* feat(website): add sign out btn

* feat(website): handle duplicate emails

* feat(website): display email in account details

* feat(website): add new showcase elements

* fix(website): layout issues for images

* Website contact form (#19)

* feat(website): add table for contact submission

* feat(website): add link to documentation in header

* chore(website): remove subject from submission

* feat(website): add textarea shadcn component

* feat(website): add form for contact us

* feat(website): add links to contact section

* feat(website): start handling contact submissions

* build(website): add `crypto-js` deps

* feat(website): add honeypot wrapper

* feat(website): rename column to isSpam

* feat(website): check for honeypot

* chore(website): add logging

* fix(frontend): use zx for parsing forms

* fix(website): add background color to heading

* fix(website): hide carousel controls and remove layout inconsistencies

* feat(website): add comparison to community page

* chore(website): add google site verification file

* feat(website): show free tier on website

* Workouts (#20)

* manga_updates includes the volume count and publication status. (#937)

* manga_updates includes the volume count and publication status. Updated to include in metadata.

* chore(backend): minor changes

* chore(backend): apply clippy lints

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* fix(frontend): use react query to get exercise details

* docs: update outdated information

* refactor(frontend): remove mostly duplicated workouts component

* feat(frontend): hide exercise details when not required

* build(ts): upgrade dependencies

* chore(frontend): change order

* chore(frontend); set correct index

* chore(frontend): remove useless code

* chore(frontend): add a new prop

* feat(frontend): hide extra details

* fix(frontend): add id to outer details

* fix(frontend): set correct key for set

* build(backend): upgrade deps

* fix(backend): log when job is running

* chore(backend): allow dead code

* build(backend): remove unused dep

* build(backend): add unkey deps

---------

Co-authored-by: Jacob <jacob11163@gmail.com>

* fix(backend): address lint problem

* fix(backend): delete revoked access links

* feat(website): add image of testimonial

* Allow redirecting using access links (#21)

* feat(database): add migrations for new `redirect_to` column for `access_link`

* feat(backend): return `redirect_to` for access links

* feat(backend): allow setting redirect_to

* feat(frontend): respect new attribute in access links

* feat(frontend): allow setting new url param

* ci: add step to build website

* chore: add column for has cancelled

* chore(backend): reconcile differences

* feat(backend): allow adding collaborators to collections

* feat(*): minor fixes

* fix(frontend): disable all metadata btns

* fix(frontend) display workout templates correctly

* chore(backend): add more logging

* chore(backend): address recommendations not being created

Also move access link stuff to user resolver.

* chore(docs): remove file

* fix(frontend): redirect to correct url for workout templates

* Create templates from workouts (#24)

* refactor(frontend): use `match`

* feat(frontend): allow creating templates from workouts

* fix(migrations): set templates key to true for existing users

* Public read-only accessibility (#25)

* feat(migrations): add column for `is_account_default` boolean column

* feat(models): add new attribute to fit to database schema

* feat(backend): allow creating account default access link

* feat(frontend): create access link correctly

* feat(frontend): allow creating default access links

* refactor(frontend): remove useless equality check

* fix(frontend): remove useless attribute

* feat(backend): new schema for process access link input

* feat(backend): allow process username based access links

* ci: add entry for account default access links

* feat(frontend): allow processing account access links

* perf(services/user): add filters on the query level

* chore(frontend): remove useless code

* ci: use new reverse proxy vars

* fix(backend): allow adding collaborators to collections

* fix(frontend): remove extra `setTimeout` call

* feat(backend): allow exporting workout templates (#27)

* ci: remove useless directives

* ci: do not login to docker hub for website

* Komga implementation (#23)

* Added Komga syncToOwned Collection
Added SyncToOwnedCollection to the Create UI (previously didnt work)
Added SyncToOwnedCollection to the Update UI

* Fixed Comments

* Add back newline

* chore(services): format files

* Finish merging changes

* Migrate to if let rather than directly handling the error

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Workout template default rest timer (#29)

* feat(migrations): migration to add default timer to workout templates

* feat(models): add new attribute to workout templates

* chore(gql): request default rest timer details

* feat(frontend): allow creating workout with default rest timer

* fix(frontend): send with correct details

* feat(backend): allow setting workout template default rest timer

* feat(frontend): allow setting workout template default rest timer

* feat(frontend): set default rest timer when editing workout templates

* feat(frontend): change position of default rest timer

* feat(frontend): display default rest timer configured for workout template

* fix(services/fitness): update default rest timer column on conflict too

* ci: remove pro from dev container setup

* ci: also publish pro image from this repo

* feat(docs): restore docs project

* feat(backend): allow setting as pro or not based on license

* feat(frontend): bring back component for pro usage

* chore(services/misc): bring back manual time spent

* chore(frontend): start migration for is pro

* feat(frontend): migrate integrations page

* feat(frontend): do not allow non pro users to create access links

* refactor(frontend): extract function to utilities module

* feat(services/user): add check for pro account

* chore(frontend): allow error to bubble from the backend

* chore(utils): change wording for error thrown

* chore(backend): add more pro checks

* feat(frontend): handle pro for creating collections

* refactor(frontend): common message for pro required

* feat(migrations): add migrations required to apply pro changes

* feat(frontend): do not allow non pro users to create templates

* feat(frontend): do not allow non pro user to create templates from workouts

* fix(frontend): use correct icon for template

* feat(frontend): add check for pro account when adding notes to set

* feat(frontend): another feature bites the dust

(I put it behind the pro check)

* chore(services/user): allow filtering users by id

* chore(frontend): change placeholder text

* chore(config): inline default variable refs

* ci: allow getting unkey api id from env

* feat(backend): remove hardcoded unkey api ids

* ci: Run CI

* chore(backend): remove useless instrumentation

* build(backend): add dotenv-build deps

* chore(backend): do not use dotenv macro

* refactor(backend): new crate for storing env variables

* chore(backend): remove useless dependency

* fix(backend): do not extract unkey api id from runtime env

* chore(backend): remove more useless text

* ci: Run CI

* ci: publish to all registries

Run CI

* refactor(frontend): use hook for details

* refactor(backend): extract more variables into env crate

Run CI.

* docs: change architecture to contributing guide

* docs: remove useless information

* docs: improve wording

* docs: better wording

* docs: remove useless line in env

* refactor(utils/env): change name of variable

* feat(migrations): add key for template workouts

* docs: remove info about pro version

* docs: add info about downgrading

* fix(importer): set correct base url

* feat(backend): do not start commit if one already in progress

* refactor(importer): extract trakt client id to env variable

* fix(backend): use correct base urls

* feat(frontend): add id for each set

* feat(frontend): focus on specific set

* Revert "feat(frontend): focus on specific set"

This reverts commit 18eaa52.

* feat(frontend): start handling highlighted set

* refactor(frontend): extract stuff into separate place

* feat(frontend): clear highligted set after 2 seconds

* feat(frontend): animate fading of box shadow

* ci: Run CI

* feat(frontend): always highlist next set

* fix(frontend): change size of box shadow

* fix(frontend): highlight set on correct conditions

* ci: Run CI

* refactor(frontend): remove useless checks

* fix(frontend): deploy job to un-highlight set only when it has been actually highlighted

* feat(migrations): add `entity_ids` column to daily user activities

* fix(statistics): do not increment show count twice

* feat(statistics): store entity_ids in daily user activites

* chore(gql): regenerate types

* feat(frontend): highlight border of set which is currently being done

* refactor(misc): use `moka` instead of `cached`

* refactor(providers): move functions to associated

* refactor(backend): move imports up

* chore(frontend): remove useless log

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>
Co-authored-by: Jacob <jacob11163@gmail.com>
IgnisDa added a commit that referenced this issue Sep 29, 2024
* Allow setting time on seen entries manually (#10)

* feat(database): add column for manual time spent

* feat(backend): allow editing time spent

* feat(frontend): allow setting manual time spent on seen entries

* feat(frontend): read default value

* feat(frontend): make manual_time_spent field a decimal

* chore(frontend): adjust to new gql schema

* feat(frontend): display manual time if present

* fix(frontend): cap the max scale

* fix(backend): add validation for pro key

* Pro changes (#9)

* feat(landing): basic paypal btns

* feat(landing): render buttons

* feat(landing): get paypal working

* refactor(landing): extract currency code

* chore(docs): remove useless files

* feat(backend): handle pro key

* feat(backend): update metadata of keys when verifying

* build(backend): add semver deps

* feat(backend): display when key expires

* fix(backend): bail only after tracing logs

* refactor(backend): do not destructure response

* feat(backend): start implementing logic for pro key validation

* chore(landing): remove files

* feat(landing): add supercharged collections pic

* feat(backend): start implementing key expiry

* feat(backend): new strategy for verifying pro key

* feat(backend): polish verification completely

* fix(backend): change condition to OR

* fix(backend): better comparisons

* feat(backend): do not serialize null params

* build(backend): remove semver deps

* feat(backend): remove dependency on custom version in key meta

* fix(backend): make correct use of variables

* feat(backend): do not log everything

* chore(backend): bail with correct error

* build(landing): add paddle deps

* feat(landing): add paddle btns

* build(landing): remove paypal deps

* feat(landing): bring back trial period

* feat(landing): remove discussions etc

* feat(landing): add information about renewal

* feat(landing): add additional information

* ci: move landing page build and deploy to separate workflow

* feat(backend): do not update key's metadata

* feat(backend): better logging.

* feat(backend): handle when no meta

* feat(landing): change svgs for contact section

* fix(backend): handle empty metadata correctly

* chore(backend): log expiry before check

* feat(landing): add to interface

* feat(landing): add basic information json

* feat(landing): get back old page

* chore(landing): edit out cursor

* ci: add env to action workflow

* feat(landing): add validation for paddle

* feat(landing): add title

* feat(landing): add id to each feature

* feat(landing): new screenshot incorporated

* chore(frontend): add dev comment

* chore(frontend): narrow if check

* feat(landing): change prices

* feat(backend): return early if pro key is invalid

* refactor(backend): change name of function

* ci: remove ref to an env variable

* ci(landing): upgrade deps

* fix(frontend): correct import

* New branch (#11)

* chore(frontend): add scroll margin when scrolling to next exercise

* feat(landing): add info about trial

* chore(landing): order of sentences

* Access links (#12)

* feat(database): add models for access links

* feat(database): add column to store tokens in access links

* feat(database): new column for access link table

* feat(backend): new entity for access link

* feat(backend): add empty impl for creating access link

* feat(backend): automatically generate id for access links

* feat(backend): add impl for creating access links

* feat(database): separate column for storing whether link is invalid

* Revert "feat(database): separate column for storing whether link is invalid"

This reverts commit 7371b26d861f169d8b05861e02991d7f5b994fb8.

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* feat(backend): empty mutation to process an access link

* feat(backend): handle error states for processing access links

* feat(backend): encode nullable access link id in token

* feat(backend): complete implementation of processing access links

* fix(database): make times used an array

* feat(backend): resolver to get all user access tokens

* feat(frontend): get user access links data

* feat(frontend): simple api route for sharing access links

* ci: add route for sharing

* feat(frontend): handle case when access link is invalid

* feat(frontend): return a valid toast instead of json response

* refactor(frontend): display error directly

* feat(frontend): basic tab for creating access link

* fix(backend): order access links by when they were created

* feat(frontend): display access link details

* feat(backend): mutation to revoke an access link

* feat(frontend): allow revoking access links

* feat(frontend): display when link has been revoked

* feat(frontend): allow creating access links

* chore(frontend): increase primary details font size

* feat(frontend): use function from utils

* fix(frontend): use dayjs lib for expiry

* feat(backend): start with function to determine whether mutation allowed

* feat(backend): complete function to determine if token is allowed to performed mutation

* feat(database): add new column for access token validity

* feat(backend): add token validity

* feat(frontend): add new field to form

* feat(backend): return number of days token is valid for

* feat(frontend): adapt to new gql schema

* fix(frontend): add a minimum and maximum threshold for access token

* build(frontend): add `jwt-decode` deps

* feat(frontend): determine whether it is an access link session

* feat(frontend): display indication when in readonly mode

* feat(frontend): correct text in tooltip

* feat(landing): add sharing image

* feat(landing): add info about sharing feature

* feat(backend): respect token revoked status

* feat(backend): cleanup job made correct

* chore(database,backend): remove access link validity field

* fix(backend): handle revoked access links correctly

* feat(frontend): remove validity column from access links

* feat(frontend): use lock icon for revoke action

Also change order of imports

* feat(frontend): no mutation is not recoverable

* chore(frontend): do an import

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Access links improvements (#13)

* feat(database): add name column to access link

* feat(backend): allow setting name for access links

* feat(frontend): display names for access links

* feat(frontend): allow redirecting using access links

* fix(backend): throw error when auth token is deleted

* Mutating access links (#14)

* feat(database): migration to add new column to access link

* feat(backend): allow storing whether access link can mutation

* feat(frontend): allow creating access links which can mutate

* feat(backend): obey new variables

* fix(frontend): change text in btn

* refactor(backend): make auth check flow much simpler

* fix(frontend): remove extra space

* fix(frontend): handle current workout a bit differently

* feat(frontend): access link improvements

* feat(landing): add links to demo page

* Workout templates (#15)

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(database): remove workout comment from top level

* feat(backend): adapt to new database schema

* chore(frontend): adapt to new gql schema

* fix(frontend): duplicate comment as well

* build: update lockfile

* feat(database): add migration to create workout template

* feat(backend): generate entities for workout templates

* refactor(backend): generate default argon

* fix(frontend): hide menu entry when creating template

* refactor(backend): to account for new workout templates

* fix(backend): skip correct input

* chore(frontend): adapt to new gql schema

* feat(*): use better types

* fix(frontend): remove heading

* fix(frontend): add description to input box

* feat(database): make the user_id non nullable

* feat(backend): add types to fields

* feat(backend): generate ids for workout templates

* feat(backend): make fields nullable

* chore(frontend): adapt to new gql schema

* fix(frontend): change name of btn

* feat(frontend): add conditionals

* chore(frontend): remove title

* chore(frontend): change page title

* fix(frontend): send workout create event only when it actually happens

* feat(backend): basic mutation to create workout template

* refactor(frontend): use functions

* feat(frontend): add template create action

* feat(frontend): adapt to new templates

* fix(frontend): add more clarifying text

* feat(backend): start impl for creating workout template

* feat(backend): make more fields nullanble

* feat(*): change lot to be non nullable

* feat(backend): store lot of exercise

* feat(backend): insert workout template into database

* fix(backend): do not serialize nulls

* refactor(frontend): change name of module

* feat(frontend): start adjusting for new endpoint

* feat(frontend): duplicate workout accurately

* feat(database): change order of migrations

* refactor(database): change name of migration

* feat(database): migration for new columns for workout

* fix(database): make created_on non nullable

* fix(database): order of column creation

* feat(backend): resolver to get workout template details

* feat(graphql): extract information into fragment

* fix(frontend): redirect to template

* fix(frontend): invalidate query correctly

* feat(graphql): add new gql query

* feat(backend): allow setting template id

* fix(frontend): extract type

* feat(frontend): set template id

* feat(frontend): get workout template details

* feat(frontend): hide done on when not applicable

* refactor(frontend): remove duplicated code

* fix(frontend): show done on always

* feat(backend): display when workout template was created

* fix(frontend): display when workout was done

* fix(frontend): no conditional

* feat(frontend): enhance cookie for storing workout

* feat(backend): allow create or update

* feat(frontend): use new mutation document

* feat(backend): allow getting id from frontend

* feat(backend): change name of field

* fix(frontend): start to implement update workout template

* feat(frontend): get the duplicate button working

* feat(frontend): get edit btn working

* feat(frontend): add a start workout btn

* refactor(frontend): fn to perform decision

* fix(frontend): change word

* feat(frontend): change order of btns

* fix(backend): remove useless extra line

* feat(backend): allow deleting workout templates

* fix(frontend): allow deleting templates

* feat(frontend): allow deleting workout templates

* fix(frontend): change text when disabled

* feat(frontend): make workout list page dynamic

* fix(frontend): display dynamic title

* feat(frontend): make page more dynamic

* feat(frontend): make page more accepting to changes

* fix(frontend): old entity model

* feat(backend): add new template field

* feat(frontend): make stuff plural

* feat(database): add new preference

* build(backend): update unkey version

* feat(backend): use upgraded unkey version

* feat(backend): resolver to get user workout templates

* feat(frontend): allow displaying templates

* feat(frontend): redirect to correct page

* fix(frontend): inline invariant

* refactor(backend): change name of query

* chore(frontend): adapt to new gql schema

* fix(frontend): make plural

* fix(frontend): more changes

* feat(frontend): display visibility of template

* feat(database): remove `is_demo` column from user

* feat(backend): adapt to new gql schema

* feat(frontend): adapt to new gql schema

* feat(database): migrate to add is_demo to access_link

* feat(backend): change how we sign jwts

* feat(frontend): adapt to new auth token schema

* fix(frontend): display when demo access link

* fix(frontend): add more to schema

* fix(frontend): associate with correct template

* feat(landing): add info about workout templates

* Add entities to collections (#16)

* refactor(backend): move location of modules

* feat(database): migration to allow adding workout to collection

* feat(backend): generate new columns for entities

* feat(backend): allow adding workouts to collections

* feat(backend): return collections for workouts

* feat(backend): add new entity lot

* feat(frontend): allow adding workouts to collections

* feat(frontend): menu item to add workout to collection

* fix(backend): do not associate user with workouts

* perf(frontend): do not fetch entire history to add exercise to workout

* feat(frontend): display workout display item for collection

* fix(frontend): move workout name to grp

* fix(frontend): add import

* feat(database): add migration to add new column to collection to entity

* refactor(database): add indices using for loop

* fix(frontend): set correct repeated from ID

* fix(frontend): adapt interval to new api

* fix(frontend): remove `useEffect` usage

* feat(backend): generate new column stuff

* feat(backend): add new entity type

* feat(backend): allow adding workout template to collection

* feat(backend): return collections for workout templates

* feat(frontend): adapt to new gql schema

* chore(backend): add clippy ignore

* fix(backend): return collection contents

* feat(frontend): display workout template in collections

* feat(database): add constraint for entity columns

* feat(database): add column for generated entity_id

* feat(backend): add new column to collection_to_entity

* refactor(backend): move entity_lot to definitions

* refactor(backend): remove duplicated stuff

* feat(frontend): remove pro required component

* chore(backend): remove conflicting implementations

* fix(frontend): add correct import

* build: add landing to workspaces

* Genre display (#18)

* refactor(frontend): extract genre display to component

* feat(frontend): hardcode image in genre display

* feat(frontend): add info about ryot pro gated feature

* chore(*): remove refs to features page

* feat(frontend): display genre images

* perf(frontend): fetching images for collections

* feat(frontend): display genre images

* Website (#17)

* feat(website): add initial website

* chore(website): remove prefix for tailwind

* feat(website): hardcode prices for both types of product

* fix(website): correct price id for cloud monthly

* feat(website): load paddle client token and prices using env variables

* feat(frontend): add btns to do purchases

* fix(database): allow migrating for empty databases

* fix(frontend): add import from paddle

* refactor(website): new module for stuff

* feat(website): move price schema to config

* build(website): add drizzle deps

* feat(website): start adding database

* feat(website): migrate app on startup

* feat(website): add basic customer model

* ci(website): add dockerfile

* ci: update path to copy from

* ci: change user running container

* ci: copy migration files

* fix(website): move stuff to root layout

* fix(website): specify smaller favicon as well

* feat(website): add basic sign up form

* feat(website): add more dependencies

* ci: add landing page to workspaces

* build(website): add workspace deps

* build(website): add ufo deps

* feat(website): allow creating user with username/password

* feat(website): make email unique

* feat(website): remove all refs to customer password

* feat(website): add column for storing `created_on`

* build(website): add oidc deps

* chore(website): make oidc issue id unique

* feat(website): allow signing up with google

* chore(website): run formatter on shadcn components

* refactor(website): do not parse prices in the loader

* fix(frontend): do not return inserted id

* refactor(website): move auth to different page

* feat(website): redirect after register

* feat(website): on conflict do nothing

* feat(website): set auth cookie when login works

* feat(website): redirect if not logged in

* build(website): add sonner deps

* feat(website): show toast when buying without login

* feat(website): function to get product and plan type

* feat(website): determine correct product and plan type from price id

* refactor(website): function to extract userId

* feat(website): update customer details after payment complete

* feat(website): return details about customer

* ci(website): set the node env for the running server

* feat(website): enable query logger in development mode

* build(website): add dayjs deps

* feat(website): set expiry date when purchase has been processed

* build(website): add gql request deps

* feat(website): create user for cloud version

* build(website): add unkey deps

* feat(website): create unkey api keys

* chore(website): order of imports

* feat(website): add config variables for mailer

* ci: hoist file gorup

* feat(transactional): add transactional lib

* ci: some routine changes

* build(transactional): allow building templates

* ci(website): update typescript config

* ci(transactional): copy files are being built

* ci: add transactional emails

* feat(transactional): use better template for generic email

* build(backend): add askama deps

* ci(transactional): do not build plaintext templates

* feat(backend): send notification using generic template

* feat(transactional): extract into layout

* refactor(transactional): extract props

* ci: copy email templates before building

* ci: change order of copying files

* build(website): add deps

* build(website): add more dep

* build(website): add more dep

* build(website): add more dep

* feat(website): update paddle customer id

* feat(website): add unique index to product type and email

* Revert "feat(website): add unique index to product type and email"

This reverts commit ce0abea9ef432ba7f8fcd0265d287691baef659d.

* ci(website): generate route file

* feat(frontend): redirect using remix routes

* feat(transactional): basic purchase complete email

* build(website): add emailjs deps

* build(website): add transactional emails as dep

* feat(website): allow sending text emails

* feat(website): start with sending emails

* build(website): add nodemailer

* feat(website): use nodemailer for email sending

* chore(website): remove useless dep

* feat(website): add name to sent email

* feat(website): allow sending email once purchase is complete

* feat(transactional): display details for self hosted plan

* build(transactional): add ts-utils dep

* feat(transactional): handle showing credentials for cloud plan

* feat(website): send info about pro access in purchase complete email

* feat(transactional): add more info about google sign in

* build(website): add paddle sdk deps

* feat(website): add new paddle token

* refactor(website): do not use fetcher

* feat(website): store first transaction id in database

* feat(website): do processing for paddle in backend

* build(website): add new deps

* fix(*): change field name to renewal

* chore(*): change name of field

* chore(website): make the expiry field a date

* fix(website): more variable renames

* chore(website): do not clone request again

* feat(transactional): email template for sending login codes

* feat(transactional): add subject to emails

* fix(website): use coded subject

* build(website): add otp input

* build(website): remove caret from versions

* feat(website): add otp input

* chore(website): add new tailwind classes

* build(website): add ttlcache deps

* feat(website): add inputs for login code

* feat(website): support for login codes

* build(website): add tabler icons dep

* feat(website): change the fonts being used

* feat(website): complete basic landing page

* fix(backend): set is pro to true

* feat(website): add cta image

* feat(website): add images to landing page

* feat(website): add a demo button

* feat(website): add new section for ease of use

* feat(website): new section for display

* chore(website): change order of imports

* feat(website): better community section

* feat(website): add testimonial

* feat(website): add umami script

* fix(website): add scroll behavior to website

* fix(website): better subtitle

* feat(website): add shadcn tooltip

* feat(website): add ids to all sections

* refactor(website): remove duplicated elements

* feat(website): display prices for stuff

* feat(website): add more content to pricing section

* fix(website): change size of btn

* feat(website): add info about type selected

* chore(website): add env file

* refactor(website): change name of paths

* feat(website): add action to index route

* feat(website): allow logging in with email

* feat(website): allow logging in with oidc

* feat(website): store when user is logged in

* feat(website): redirect correctly

* feat(transactional): render email conditionally

* lots of changes

* chore(transactional): return fragment instead of `null`

* feat(website): extract layout to header

* feat(website): add better contrast between elements

* feat(website): add new page for me

* fix(website): change css

* fix(website): change link when logged in

* feat(website): display icon in title

* feat(website): show btn if already logged in

* feat(website): add link to terms

* chore(website): change order of header links

* feat(website): add terms and condiitions page

* build(website): add tailwind typography to deps

* feat(website): add terms page

* chore(website): order of imports

* chore: remove `landing` app

* feat(website): extract pricing section into component

* feat(website): allow sending pricing information

* feat(website): redirect if logged out

* feat(website): allow users to buy using `/me` page

* feat(website): add shadcn card component

* feat(website): display plan details after purchase complete

* fix(website): better layout

* fix(website): do umami on incorrect domains

* fix(website): image was getting cut off

* feat(website): add btn for my account

* fix(website): display renewal status

* fix(website): do not display renew on if it can not be renewed

* ci(website): set host for image

* feat(website): add carousel shadcn component

* build(website): add autoplay deps

* feat(website): add carousel for displaying showcase

* fix(frontend): set definite width

* feat(website): add more features

* fix(website): remove next and previous btn

* feat(website): add sign out btn

* feat(website): handle duplicate emails

* feat(website): display email in account details

* feat(website): add new showcase elements

* fix(website): layout issues for images

* Website contact form (#19)

* feat(website): add table for contact submission

* feat(website): add link to documentation in header

* chore(website): remove subject from submission

* feat(website): add textarea shadcn component

* feat(website): add form for contact us

* feat(website): add links to contact section

* feat(website): start handling contact submissions

* build(website): add `crypto-js` deps

* feat(website): add honeypot wrapper

* feat(website): rename column to isSpam

* feat(website): check for honeypot

* chore(website): add logging

* fix(frontend): use zx for parsing forms

* fix(website): add background color to heading

* fix(website): hide carousel controls and remove layout inconsistencies

* feat(website): add comparison to community page

* chore(website): add google site verification file

* feat(website): show free tier on website

* Workouts (#20)

* manga_updates includes the volume count and publication status. (#937)

* manga_updates includes the volume count and publication status. Updated to include in metadata.

* chore(backend): minor changes

* chore(backend): apply clippy lints

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* fix(frontend): use react query to get exercise details

* docs: update outdated information

* refactor(frontend): remove mostly duplicated workouts component

* feat(frontend): hide exercise details when not required

* build(ts): upgrade dependencies

* chore(frontend): change order

* chore(frontend); set correct index

* chore(frontend): remove useless code

* chore(frontend): add a new prop

* feat(frontend): hide extra details

* fix(frontend): add id to outer details

* fix(frontend): set correct key for set

* build(backend): upgrade deps

* fix(backend): log when job is running

* chore(backend): allow dead code

* build(backend): remove unused dep

* build(backend): add unkey deps

---------

Co-authored-by: Jacob <jacob11163@gmail.com>

* fix(backend): address lint problem

* fix(backend): delete revoked access links

* feat(website): add image of testimonial

* Allow redirecting using access links (#21)

* feat(database): add migrations for new `redirect_to` column for `access_link`

* feat(backend): return `redirect_to` for access links

* feat(backend): allow setting redirect_to

* feat(frontend): respect new attribute in access links

* feat(frontend): allow setting new url param

* ci: add step to build website

* chore: add column for has cancelled

* chore(backend): reconcile differences

* feat(backend): allow adding collaborators to collections

* feat(*): minor fixes

* fix(frontend): disable all metadata btns

* fix(frontend) display workout templates correctly

* chore(backend): add more logging

* chore(backend): address recommendations not being created

Also move access link stuff to user resolver.

* chore(docs): remove file

* fix(frontend): redirect to correct url for workout templates

* Create templates from workouts (#24)

* refactor(frontend): use `match`

* feat(frontend): allow creating templates from workouts

* fix(migrations): set templates key to true for existing users

* Public read-only accessibility (#25)

* feat(migrations): add column for `is_account_default` boolean column

* feat(models): add new attribute to fit to database schema

* feat(backend): allow creating account default access link

* feat(frontend): create access link correctly

* feat(frontend): allow creating default access links

* refactor(frontend): remove useless equality check

* fix(frontend): remove useless attribute

* feat(backend): new schema for process access link input

* feat(backend): allow process username based access links

* ci: add entry for account default access links

* feat(frontend): allow processing account access links

* perf(services/user): add filters on the query level

* chore(frontend): remove useless code

* ci: use new reverse proxy vars

* fix(backend): allow adding collaborators to collections

* fix(frontend): remove extra `setTimeout` call

* feat(backend): allow exporting workout templates (#27)

* ci: remove useless directives

* ci: do not login to docker hub for website

* Komga implementation (#23)

* Added Komga syncToOwned Collection
Added SyncToOwnedCollection to the Create UI (previously didnt work)
Added SyncToOwnedCollection to the Update UI

* Fixed Comments

* Add back newline

* chore(services): format files

* Finish merging changes

* Migrate to if let rather than directly handling the error

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Workout template default rest timer (#29)

* feat(migrations): migration to add default timer to workout templates

* feat(models): add new attribute to workout templates

* chore(gql): request default rest timer details

* feat(frontend): allow creating workout with default rest timer

* fix(frontend): send with correct details

* feat(backend): allow setting workout template default rest timer

* feat(frontend): allow setting workout template default rest timer

* feat(frontend): set default rest timer when editing workout templates

* feat(frontend): change position of default rest timer

* feat(frontend): display default rest timer configured for workout template

* fix(services/fitness): update default rest timer column on conflict too

* ci: remove pro from dev container setup

* ci: also publish pro image from this repo

* feat(docs): restore docs project

* feat(backend): allow setting as pro or not based on license

* feat(frontend): bring back component for pro usage

* chore(services/misc): bring back manual time spent

* chore(frontend): start migration for is pro

* feat(frontend): migrate integrations page

* feat(frontend): do not allow non pro users to create access links

* refactor(frontend): extract function to utilities module

* feat(services/user): add check for pro account

* chore(frontend): allow error to bubble from the backend

* chore(utils): change wording for error thrown

* chore(backend): add more pro checks

* feat(frontend): handle pro for creating collections

* refactor(frontend): common message for pro required

* feat(migrations): add migrations required to apply pro changes

* feat(frontend): do not allow non pro users to create templates

* feat(frontend): do not allow non pro user to create templates from workouts

* fix(frontend): use correct icon for template

* feat(frontend): add check for pro account when adding notes to set

* feat(frontend): another feature bites the dust

(I put it behind the pro check)

* chore(services/user): allow filtering users by id

* chore(frontend): change placeholder text

* chore(config): inline default variable refs

* ci: allow getting unkey api id from env

* feat(backend): remove hardcoded unkey api ids

* ci: Run CI

* chore(backend): remove useless instrumentation

* build(backend): add dotenv-build deps

* chore(backend): do not use dotenv macro

* refactor(backend): new crate for storing env variables

* chore(backend): remove useless dependency

* fix(backend): do not extract unkey api id from runtime env

* chore(backend): remove more useless text

* ci: Run CI

* ci: publish to all registries

Run CI

* refactor(frontend): use hook for details

* refactor(backend): extract more variables into env crate

Run CI.

* docs: change architecture to contributing guide

* docs: remove useless information

* docs: improve wording

* docs: better wording

* docs: remove useless line in env

* refactor(utils/env): change name of variable

* feat(migrations): add key for template workouts

* docs: remove info about pro version

* docs: add info about downgrading

* fix(importer): set correct base url

* feat(backend): do not start commit if one already in progress

* refactor(importer): extract trakt client id to env variable

* fix(backend): use correct base urls

* feat(frontend): add id for each set

* feat(frontend): focus on specific set

* Revert "feat(frontend): focus on specific set"

This reverts commit 18eaa52.

* feat(frontend): start handling highlighted set

* refactor(frontend): extract stuff into separate place

* feat(frontend): clear highligted set after 2 seconds

* feat(frontend): animate fading of box shadow

* ci: Run CI

* feat(frontend): always highlist next set

* fix(frontend): change size of box shadow

* fix(frontend): highlight set on correct conditions

* ci: Run CI

* refactor(frontend): remove useless checks

* fix(frontend): deploy job to un-highlight set only when it has been actually highlighted

* feat(migrations): add `entity_ids` column to daily user activities

* fix(statistics): do not increment show count twice

* feat(statistics): store entity_ids in daily user activites

* chore(gql): regenerate types

* feat(frontend): highlight border of set which is currently being done

* refactor(misc): use `moka` instead of `cached`

* refactor(providers): move functions to associated

* refactor(backend): move imports up

* chore(frontend): remove useless log

* feat(migrations): add grid packing to preferences

* feat(backend): add grid packing preference

* feat(services/user): allow changing grid packing pref

* feat(frontend): allow changing grid packing pref

* feat(frontend): respect grid packing preference

* feat(frontend): add description to new preference

* fix(frontend): add more padding when dense packing

* refactor(frontend): move margin top to parent

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>
Co-authored-by: Jacob <jacob11163@gmail.com>
IgnisDa added a commit that referenced this issue Oct 1, 2024
* Revert "Remove landing (#904)"

This reverts commit 182e4e7.

* chore: remove docs application

* Allow setting time on seen entries manually (#10)

* feat(database): add column for manual time spent

* feat(backend): allow editing time spent

* feat(frontend): allow setting manual time spent on seen entries

* feat(frontend): read default value

* feat(frontend): make manual_time_spent field a decimal

* chore(frontend): adjust to new gql schema

* feat(frontend): display manual time if present

* fix(frontend): cap the max scale

* fix(backend): add validation for pro key

* Pro changes (#9)

* feat(landing): basic paypal btns

* feat(landing): render buttons

* feat(landing): get paypal working

* refactor(landing): extract currency code

* chore(docs): remove useless files

* feat(backend): handle pro key

* feat(backend): update metadata of keys when verifying

* build(backend): add semver deps

* feat(backend): display when key expires

* fix(backend): bail only after tracing logs

* refactor(backend): do not destructure response

* feat(backend): start implementing logic for pro key validation

* chore(landing): remove files

* feat(landing): add supercharged collections pic

* feat(backend): start implementing key expiry

* feat(backend): new strategy for verifying pro key

* feat(backend): polish verification completely

* fix(backend): change condition to OR

* fix(backend): better comparisons

* feat(backend): do not serialize null params

* build(backend): remove semver deps

* feat(backend): remove dependency on custom version in key meta

* fix(backend): make correct use of variables

* feat(backend): do not log everything

* chore(backend): bail with correct error

* build(landing): add paddle deps

* feat(landing): add paddle btns

* build(landing): remove paypal deps

* feat(landing): bring back trial period

* feat(landing): remove discussions etc

* feat(landing): add information about renewal

* feat(landing): add additional information

* ci: move landing page build and deploy to separate workflow

* feat(backend): do not update key's metadata

* feat(backend): better logging.

* feat(backend): handle when no meta

* feat(landing): change svgs for contact section

* fix(backend): handle empty metadata correctly

* chore(backend): log expiry before check

* feat(landing): add to interface

* feat(landing): add basic information json

* feat(landing): get back old page

* chore(landing): edit out cursor

* ci: add env to action workflow

* feat(landing): add validation for paddle

* feat(landing): add title

* feat(landing): add id to each feature

* feat(landing): new screenshot incorporated

* chore(frontend): add dev comment

* chore(frontend): narrow if check

* feat(landing): change prices

* feat(backend): return early if pro key is invalid

* refactor(backend): change name of function

* ci: remove ref to an env variable

* ci(landing): upgrade deps

* fix(frontend): correct import

* New branch (#11)

* chore(frontend): add scroll margin when scrolling to next exercise

* feat(landing): add info about trial

* chore(landing): order of sentences

* Access links (#12)

* feat(database): add models for access links

* feat(database): add column to store tokens in access links

* feat(database): new column for access link table

* feat(backend): new entity for access link

* feat(backend): add empty impl for creating access link

* feat(backend): automatically generate id for access links

* feat(backend): add impl for creating access links

* feat(database): separate column for storing whether link is invalid

* Revert "feat(database): separate column for storing whether link is invalid"

This reverts commit 7371b26d861f169d8b05861e02991d7f5b994fb8.

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* feat(backend): empty mutation to process an access link

* feat(backend): handle error states for processing access links

* feat(backend): encode nullable access link id in token

* feat(backend): complete implementation of processing access links

* fix(database): make times used an array

* feat(backend): resolver to get all user access tokens

* feat(frontend): get user access links data

* feat(frontend): simple api route for sharing access links

* ci: add route for sharing

* feat(frontend): handle case when access link is invalid

* feat(frontend): return a valid toast instead of json response

* refactor(frontend): display error directly

* feat(frontend): basic tab for creating access link

* fix(backend): order access links by when they were created

* feat(frontend): display access link details

* feat(backend): mutation to revoke an access link

* feat(frontend): allow revoking access links

* feat(frontend): display when link has been revoked

* feat(frontend): allow creating access links

* chore(frontend): increase primary details font size

* feat(frontend): use function from utils

* fix(frontend): use dayjs lib for expiry

* feat(backend): start with function to determine whether mutation allowed

* feat(backend): complete function to determine if token is allowed to performed mutation

* feat(database): add new column for access token validity

* feat(backend): add token validity

* feat(frontend): add new field to form

* feat(backend): return number of days token is valid for

* feat(frontend): adapt to new gql schema

* fix(frontend): add a minimum and maximum threshold for access token

* build(frontend): add `jwt-decode` deps

* feat(frontend): determine whether it is an access link session

* feat(frontend): display indication when in readonly mode

* feat(frontend): correct text in tooltip

* feat(landing): add sharing image

* feat(landing): add info about sharing feature

* feat(backend): respect token revoked status

* feat(backend): cleanup job made correct

* chore(database,backend): remove access link validity field

* fix(backend): handle revoked access links correctly

* feat(frontend): remove validity column from access links

* feat(frontend): use lock icon for revoke action

Also change order of imports

* feat(frontend): no mutation is not recoverable

* chore(frontend): do an import

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Access links improvements (#13)

* feat(database): add name column to access link

* feat(backend): allow setting name for access links

* feat(frontend): display names for access links

* feat(frontend): allow redirecting using access links

* fix(backend): throw error when auth token is deleted

* Mutating access links (#14)

* feat(database): migration to add new column to access link

* feat(backend): allow storing whether access link can mutation

* feat(frontend): allow creating access links which can mutate

* feat(backend): obey new variables

* fix(frontend): change text in btn

* refactor(backend): make auth check flow much simpler

* fix(frontend): remove extra space

* fix(frontend): handle current workout a bit differently

* feat(frontend): access link improvements

* feat(landing): add links to demo page

* Workout templates (#15)

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(frontend): change name of route

* feat(backend): change path of user uploads

* build(backend): add `mime_guess` deps

* fix(backend): make correct put request from backend

* ci: switch to using bun

* ci: remove references to yarn

* Revert "ci: switch to using bun"

This reverts commit c2f991e.

* Revert "ci: remove references to yarn"

This reverts commit dd5bfa6.

* feat(frontend): adapt to allow creating templates

* fix(frontend): change dynamically

* fix(backend): remove alias

* feat(database): remove workout comment from top level

* feat(backend): adapt to new database schema

* chore(frontend): adapt to new gql schema

* fix(frontend): duplicate comment as well

* build: update lockfile

* feat(database): add migration to create workout template

* feat(backend): generate entities for workout templates

* refactor(backend): generate default argon

* fix(frontend): hide menu entry when creating template

* refactor(backend): to account for new workout templates

* fix(backend): skip correct input

* chore(frontend): adapt to new gql schema

* feat(*): use better types

* fix(frontend): remove heading

* fix(frontend): add description to input box

* feat(database): make the user_id non nullable

* feat(backend): add types to fields

* feat(backend): generate ids for workout templates

* feat(backend): make fields nullable

* chore(frontend): adapt to new gql schema

* fix(frontend): change name of btn

* feat(frontend): add conditionals

* chore(frontend): remove title

* chore(frontend): change page title

* fix(frontend): send workout create event only when it actually happens

* feat(backend): basic mutation to create workout template

* refactor(frontend): use functions

* feat(frontend): add template create action

* feat(frontend): adapt to new templates

* fix(frontend): add more clarifying text

* feat(backend): start impl for creating workout template

* feat(backend): make more fields nullanble

* feat(*): change lot to be non nullable

* feat(backend): store lot of exercise

* feat(backend): insert workout template into database

* fix(backend): do not serialize nulls

* refactor(frontend): change name of module

* feat(frontend): start adjusting for new endpoint

* feat(frontend): duplicate workout accurately

* feat(database): change order of migrations

* refactor(database): change name of migration

* feat(database): migration for new columns for workout

* fix(database): make created_on non nullable

* fix(database): order of column creation

* feat(backend): resolver to get workout template details

* feat(graphql): extract information into fragment

* fix(frontend): redirect to template

* fix(frontend): invalidate query correctly

* feat(graphql): add new gql query

* feat(backend): allow setting template id

* fix(frontend): extract type

* feat(frontend): set template id

* feat(frontend): get workout template details

* feat(frontend): hide done on when not applicable

* refactor(frontend): remove duplicated code

* fix(frontend): show done on always

* feat(backend): display when workout template was created

* fix(frontend): display when workout was done

* fix(frontend): no conditional

* feat(frontend): enhance cookie for storing workout

* feat(backend): allow create or update

* feat(frontend): use new mutation document

* feat(backend): allow getting id from frontend

* feat(backend): change name of field

* fix(frontend): start to implement update workout template

* feat(frontend): get the duplicate button working

* feat(frontend): get edit btn working

* feat(frontend): add a start workout btn

* refactor(frontend): fn to perform decision

* fix(frontend): change word

* feat(frontend): change order of btns

* fix(backend): remove useless extra line

* feat(backend): allow deleting workout templates

* fix(frontend): allow deleting templates

* feat(frontend): allow deleting workout templates

* fix(frontend): change text when disabled

* feat(frontend): make workout list page dynamic

* fix(frontend): display dynamic title

* feat(frontend): make page more dynamic

* feat(frontend): make page more accepting to changes

* fix(frontend): old entity model

* feat(backend): add new template field

* feat(frontend): make stuff plural

* feat(database): add new preference

* build(backend): update unkey version

* feat(backend): use upgraded unkey version

* feat(backend): resolver to get user workout templates

* feat(frontend): allow displaying templates

* feat(frontend): redirect to correct page

* fix(frontend): inline invariant

* refactor(backend): change name of query

* chore(frontend): adapt to new gql schema

* fix(frontend): make plural

* fix(frontend): more changes

* feat(frontend): display visibility of template

* feat(database): remove `is_demo` column from user

* feat(backend): adapt to new gql schema

* feat(frontend): adapt to new gql schema

* feat(database): migrate to add is_demo to access_link

* feat(backend): change how we sign jwts

* feat(frontend): adapt to new auth token schema

* fix(frontend): display when demo access link

* fix(frontend): add more to schema

* fix(frontend): associate with correct template

* feat(landing): add info about workout templates

* Add entities to collections (#16)

* refactor(backend): move location of modules

* feat(database): migration to allow adding workout to collection

* feat(backend): generate new columns for entities

* feat(backend): allow adding workouts to collections

* feat(backend): return collections for workouts

* feat(backend): add new entity lot

* feat(frontend): allow adding workouts to collections

* feat(frontend): menu item to add workout to collection

* fix(backend): do not associate user with workouts

* perf(frontend): do not fetch entire history to add exercise to workout

* feat(frontend): display workout display item for collection

* fix(frontend): move workout name to grp

* fix(frontend): add import

* feat(database): add migration to add new column to collection to entity

* refactor(database): add indices using for loop

* fix(frontend): set correct repeated from ID

* fix(frontend): adapt interval to new api

* fix(frontend): remove `useEffect` usage

* feat(backend): generate new column stuff

* feat(backend): add new entity type

* feat(backend): allow adding workout template to collection

* feat(backend): return collections for workout templates

* feat(frontend): adapt to new gql schema

* chore(backend): add clippy ignore

* fix(backend): return collection contents

* feat(frontend): display workout template in collections

* feat(database): add constraint for entity columns

* feat(database): add column for generated entity_id

* feat(backend): add new column to collection_to_entity

* refactor(backend): move entity_lot to definitions

* refactor(backend): remove duplicated stuff

* feat(frontend): remove pro required component

* chore(backend): remove conflicting implementations

* fix(frontend): add correct import

* build: add landing to workspaces

* Genre display (#18)

* refactor(frontend): extract genre display to component

* feat(frontend): hardcode image in genre display

* feat(frontend): add info about ryot pro gated feature

* chore(*): remove refs to features page

* feat(frontend): display genre images

* perf(frontend): fetching images for collections

* feat(frontend): display genre images

* Website (#17)

* feat(website): add initial website

* chore(website): remove prefix for tailwind

* feat(website): hardcode prices for both types of product

* fix(website): correct price id for cloud monthly

* feat(website): load paddle client token and prices using env variables

* feat(frontend): add btns to do purchases

* fix(database): allow migrating for empty databases

* fix(frontend): add import from paddle

* refactor(website): new module for stuff

* feat(website): move price schema to config

* build(website): add drizzle deps

* feat(website): start adding database

* feat(website): migrate app on startup

* feat(website): add basic customer model

* ci(website): add dockerfile

* ci: update path to copy from

* ci: change user running container

* ci: copy migration files

* fix(website): move stuff to root layout

* fix(website): specify smaller favicon as well

* feat(website): add basic sign up form

* feat(website): add more dependencies

* ci: add landing page to workspaces

* build(website): add workspace deps

* build(website): add ufo deps

* feat(website): allow creating user with username/password

* feat(website): make email unique

* feat(website): remove all refs to customer password

* feat(website): add column for storing `created_on`

* build(website): add oidc deps

* chore(website): make oidc issue id unique

* feat(website): allow signing up with google

* chore(website): run formatter on shadcn components

* refactor(website): do not parse prices in the loader

* fix(frontend): do not return inserted id

* refactor(website): move auth to different page

* feat(website): redirect after register

* feat(website): on conflict do nothing

* feat(website): set auth cookie when login works

* feat(website): redirect if not logged in

* build(website): add sonner deps

* feat(website): show toast when buying without login

* feat(website): function to get product and plan type

* feat(website): determine correct product and plan type from price id

* refactor(website): function to extract userId

* feat(website): update customer details after payment complete

* feat(website): return details about customer

* ci(website): set the node env for the running server

* feat(website): enable query logger in development mode

* build(website): add dayjs deps

* feat(website): set expiry date when purchase has been processed

* build(website): add gql request deps

* feat(website): create user for cloud version

* build(website): add unkey deps

* feat(website): create unkey api keys

* chore(website): order of imports

* feat(website): add config variables for mailer

* ci: hoist file gorup

* feat(transactional): add transactional lib

* ci: some routine changes

* build(transactional): allow building templates

* ci(website): update typescript config

* ci(transactional): copy files are being built

* ci: add transactional emails

* feat(transactional): use better template for generic email

* build(backend): add askama deps

* ci(transactional): do not build plaintext templates

* feat(backend): send notification using generic template

* feat(transactional): extract into layout

* refactor(transactional): extract props

* ci: copy email templates before building

* ci: change order of copying files

* build(website): add deps

* build(website): add more dep

* build(website): add more dep

* build(website): add more dep

* feat(website): update paddle customer id

* feat(website): add unique index to product type and email

* Revert "feat(website): add unique index to product type and email"

This reverts commit ce0abea9ef432ba7f8fcd0265d287691baef659d.

* ci(website): generate route file

* feat(frontend): redirect using remix routes

* feat(transactional): basic purchase complete email

* build(website): add emailjs deps

* build(website): add transactional emails as dep

* feat(website): allow sending text emails

* feat(website): start with sending emails

* build(website): add nodemailer

* feat(website): use nodemailer for email sending

* chore(website): remove useless dep

* feat(website): add name to sent email

* feat(website): allow sending email once purchase is complete

* feat(transactional): display details for self hosted plan

* build(transactional): add ts-utils dep

* feat(transactional): handle showing credentials for cloud plan

* feat(website): send info about pro access in purchase complete email

* feat(transactional): add more info about google sign in

* build(website): add paddle sdk deps

* feat(website): add new paddle token

* refactor(website): do not use fetcher

* feat(website): store first transaction id in database

* feat(website): do processing for paddle in backend

* build(website): add new deps

* fix(*): change field name to renewal

* chore(*): change name of field

* chore(website): make the expiry field a date

* fix(website): more variable renames

* chore(website): do not clone request again

* feat(transactional): email template for sending login codes

* feat(transactional): add subject to emails

* fix(website): use coded subject

* build(website): add otp input

* build(website): remove caret from versions

* feat(website): add otp input

* chore(website): add new tailwind classes

* build(website): add ttlcache deps

* feat(website): add inputs for login code

* feat(website): support for login codes

* build(website): add tabler icons dep

* feat(website): change the fonts being used

* feat(website): complete basic landing page

* fix(backend): set is pro to true

* feat(website): add cta image

* feat(website): add images to landing page

* feat(website): add a demo button

* feat(website): add new section for ease of use

* feat(website): new section for display

* chore(website): change order of imports

* feat(website): better community section

* feat(website): add testimonial

* feat(website): add umami script

* fix(website): add scroll behavior to website

* fix(website): better subtitle

* feat(website): add shadcn tooltip

* feat(website): add ids to all sections

* refactor(website): remove duplicated elements

* feat(website): display prices for stuff

* feat(website): add more content to pricing section

* fix(website): change size of btn

* feat(website): add info about type selected

* chore(website): add env file

* refactor(website): change name of paths

* feat(website): add action to index route

* feat(website): allow logging in with email

* feat(website): allow logging in with oidc

* feat(website): store when user is logged in

* feat(website): redirect correctly

* feat(transactional): render email conditionally

* lots of changes

* chore(transactional): return fragment instead of `null`

* feat(website): extract layout to header

* feat(website): add better contrast between elements

* feat(website): add new page for me

* fix(website): change css

* fix(website): change link when logged in

* feat(website): display icon in title

* feat(website): show btn if already logged in

* feat(website): add link to terms

* chore(website): change order of header links

* feat(website): add terms and condiitions page

* build(website): add tailwind typography to deps

* feat(website): add terms page

* chore(website): order of imports

* chore: remove `landing` app

* feat(website): extract pricing section into component

* feat(website): allow sending pricing information

* feat(website): redirect if logged out

* feat(website): allow users to buy using `/me` page

* feat(website): add shadcn card component

* feat(website): display plan details after purchase complete

* fix(website): better layout

* fix(website): do umami on incorrect domains

* fix(website): image was getting cut off

* feat(website): add btn for my account

* fix(website): display renewal status

* fix(website): do not display renew on if it can not be renewed

* ci(website): set host for image

* feat(website): add carousel shadcn component

* build(website): add autoplay deps

* feat(website): add carousel for displaying showcase

* fix(frontend): set definite width

* feat(website): add more features

* fix(website): remove next and previous btn

* feat(website): add sign out btn

* feat(website): handle duplicate emails

* feat(website): display email in account details

* feat(website): add new showcase elements

* fix(website): layout issues for images

* Website contact form (#19)

* feat(website): add table for contact submission

* feat(website): add link to documentation in header

* chore(website): remove subject from submission

* feat(website): add textarea shadcn component

* feat(website): add form for contact us

* feat(website): add links to contact section

* feat(website): start handling contact submissions

* build(website): add `crypto-js` deps

* feat(website): add honeypot wrapper

* feat(website): rename column to isSpam

* feat(website): check for honeypot

* chore(website): add logging

* fix(frontend): use zx for parsing forms

* fix(website): add background color to heading

* fix(website): hide carousel controls and remove layout inconsistencies

* feat(website): add comparison to community page

* chore(website): add google site verification file

* feat(website): show free tier on website

* Workouts (#20)

* manga_updates includes the volume count and publication status. (#937)

* manga_updates includes the volume count and publication status. Updated to include in metadata.

* chore(backend): minor changes

* chore(backend): apply clippy lints

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* fix(frontend): use react query to get exercise details

* docs: update outdated information

* refactor(frontend): remove mostly duplicated workouts component

* feat(frontend): hide exercise details when not required

* build(ts): upgrade dependencies

* chore(frontend): change order

* chore(frontend); set correct index

* chore(frontend): remove useless code

* chore(frontend): add a new prop

* feat(frontend): hide extra details

* fix(frontend): add id to outer details

* fix(frontend): set correct key for set

* build(backend): upgrade deps

* fix(backend): log when job is running

* chore(backend): allow dead code

* build(backend): remove unused dep

* build(backend): add unkey deps

---------

Co-authored-by: Jacob <jacob11163@gmail.com>

* fix(backend): address lint problem

* fix(backend): delete revoked access links

* feat(website): add image of testimonial

* Allow redirecting using access links (#21)

* feat(database): add migrations for new `redirect_to` column for `access_link`

* feat(backend): return `redirect_to` for access links

* feat(backend): allow setting redirect_to

* feat(frontend): respect new attribute in access links

* feat(frontend): allow setting new url param

* ci: add step to build website

* chore: add column for has cancelled

* chore(backend): reconcile differences

* feat(backend): allow adding collaborators to collections

* feat(*): minor fixes

* fix(frontend): disable all metadata btns

* fix(frontend) display workout templates correctly

* chore(backend): add more logging

* chore(backend): address recommendations not being created

Also move access link stuff to user resolver.

* chore(docs): remove file

* fix(frontend): redirect to correct url for workout templates

* Create templates from workouts (#24)

* refactor(frontend): use `match`

* feat(frontend): allow creating templates from workouts

* fix(migrations): set templates key to true for existing users

* Public read-only accessibility (#25)

* feat(migrations): add column for `is_account_default` boolean column

* feat(models): add new attribute to fit to database schema

* feat(backend): allow creating account default access link

* feat(frontend): create access link correctly

* feat(frontend): allow creating default access links

* refactor(frontend): remove useless equality check

* fix(frontend): remove useless attribute

* feat(backend): new schema for process access link input

* feat(backend): allow process username based access links

* ci: add entry for account default access links

* feat(frontend): allow processing account access links

* perf(services/user): add filters on the query level

* chore(frontend): remove useless code

* ci: use new reverse proxy vars

* fix(backend): allow adding collaborators to collections

* fix(frontend): remove extra `setTimeout` call

* feat(backend): allow exporting workout templates (#27)

* ci: remove useless directives

* ci: do not login to docker hub for website

* Komga implementation (#23)

* Added Komga syncToOwned Collection
Added SyncToOwnedCollection to the Create UI (previously didnt work)
Added SyncToOwnedCollection to the Update UI

* Fixed Comments

* Add back newline

* chore(services): format files

* Finish merging changes

* Migrate to if let rather than directly handling the error

---------

Co-authored-by: Diptesh Choudhuri <ignisda2001@gmail.com>

* Workout template default rest timer (#29)

* feat(migrations): migration to add default timer to workout templates

* feat(models): add new attribute to workout templates

* chore(gql): request default rest timer details

* feat(frontend): allow creating workout with default rest timer

* fix(frontend): send with correct details

* feat(backend): allow setting workout template default rest timer

* feat(frontend): allow setting workout template default rest timer

* feat(frontend): set default rest timer when editing workout templates

* feat(frontend): change position of default rest timer

* feat(frontend): display default rest timer configured for workout template

* fix(services/fitness): update default rest timer column on conflict too

* ci: remove pro from dev container setup

* ci: also publish pro image from this repo

* feat(docs): restore docs project

* feat(backend): allow setting as pro or not based on license

* feat(frontend): bring back component for pro usage

* chore(services/misc): bring back manual time spent

* chore(frontend): start migration for is pro

* feat(frontend): migrate integrations page

* feat(frontend): do not allow non pro users to create access links

* refactor(frontend): extract function to utilities module

* feat(services/user): add check for pro account

* chore(frontend): allow error to bubble from the backend

* chore(utils): change wording for error thrown

* chore(backend): add more pro checks

* feat(frontend): handle pro for creating collections

* refactor(frontend): common message for pro required

* feat(migrations): add migrations required to apply pro changes

* feat(frontend): do not allow non pro users to create templates

* feat(frontend): do not allow non pro user to create templates from workouts

* fix(frontend): use correct icon for template

* feat(frontend): add check for pro account when adding notes to set

* feat(frontend): another feature bites the dust

(I put it behind the pro check)

* chore(services/user): allow filtering users by id

* chore(frontend): change placeholder text

* chore(config): inline default variable refs

* ci: allow getting unkey api id from env

* feat(backend): remove hardcoded unkey api ids

* ci: Run CI

* chore(backend): remove useless instrumentation

* build(backend): add dotenv-build deps

* chore(backend): do not use dotenv macro

* refactor(backend): new crate for storing env variables

* chore(backend): remove useless dependency

* fix(backend): do not extract unkey api id from runtime env

* chore(backend): remove more useless text

* ci: Run CI

* ci: publish to all registries

Run CI

* refactor(frontend): use hook for details

* refactor(backend): extract more variables into env crate

Run CI.

* docs: change architecture to contributing guide

* docs: remove useless information

* docs: improve wording

* docs: better wording

* docs: remove useless line in env

* refactor(utils/env): change name of variable

* feat(migrations): add key for template workouts

* docs: remove info about pro version

* docs: add info about downgrading

* fix(importer): set correct base url

* feat(backend): do not start commit if one already in progress

* refactor(importer): extract trakt client id to env variable

* fix(backend): use correct base urls

* feat(frontend): add id for each set

* feat(frontend): focus on specific set

* Revert "feat(frontend): focus on specific set"

This reverts commit 18eaa52.

* feat(frontend): start handling highlighted set

* refactor(frontend): extract stuff into separate place

* feat(frontend): clear highligted set after 2 seconds

* feat(frontend): animate fading of box shadow

* ci: Run CI

* feat(frontend): always highlist next set

* fix(frontend): change size of box shadow

* fix(frontend): highlight set on correct conditions

* ci: Run CI

* refactor(frontend): remove useless checks

* fix(frontend): deploy job to un-highlight set only when it has been actually highlighted

* feat(migrations): add `entity_ids` column to daily user activities

* fix(statistics): do not increment show count twice

* feat(statistics): store entity_ids in daily user activites

* chore(gql): regenerate types

* feat(frontend): highlight border of set which is currently being done

* refactor(misc): use `moka` instead of `cached`

* refactor(providers): move functions to associated

* refactor(backend): move imports up

* chore(frontend): remove useless log

* build(frontend): add pwa deps

* feat(frontend): use remix pwa in service worker

* feat(frontend): start handling notification clicks

* feat(frontend): trigger notification when timer ends

This will only if triggered only if the webpage is not visible.

---------

Signed-off-by: Diptesh Choudhuri <ignisda2001@gmail.com>
Co-authored-by: Jacob <jacob11163@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant