aabounegm / cast Goto Github PK
View Code? Open in Web Editor NEWA podcast listening progressive web app with all-around automated quality assurance
Home Page: https://cast-iu.pages.dev
License: MIT License
A podcast listening progressive web app with all-around automated quality assurance
Home Page: https://cast-iu.pages.dev
License: MIT License
Use this GitHub Action. Create an escape route to skip code review when a feature was pair-programmed.
Acceptance criteria:
pair-programmed
label should not be affected.Blocked by #2
Use the Svelte Testing Library with Jest.
Acceptance criteria:
pnpm test:unit
in the app
project runs the test suiteUse svelte-persistent-writable
. No need to track the entire history, a rolling history of 6 entries is sufficient.
Acceptance criteria:
Steps:
svelte-check
from .husky/pre-commit
pnpm exec husky add .husky/pre-push <that command from pre-commit that runs svelte-check>
Use Upptime.
Acceptance criteria:
Acceptance criteria:
Artifacts:
Integrate with the Supabase backend to fetch a list of all podcasts with all of their meta information and the URL to the audio file. For now, just dump it as JSON somewhere.
Acceptance criteria:
cast-iu.pages.dev
)Interfaces:
interface Podcast {
id: number;
title: string;
author: string;
coverUrl: string;
episodes: Episode[];
}
interface Episode {
id: number;
title: string;
duration: number;
audioUrl: string;
favorite?: boolean; // omit this field for now
}
Each sprint should correspond to a milestone.
Currently, the lint
script runs 3 things, chaining them with ;
. In shell terms this means "disregard the exit code of the first 2 commands and use the exit code of the last command as the final exit code". Hence, when ESLint or Prettier fail, but svelte-check
passes, we get a passing workflow.
An obvious solution would be to chain the commands with &&
, but the problem with that is that a failing command prevents all of the subsequent commands from running. When using the lint
script locally, it's nice to see problems from all 3 tools to take parallel action.
Having said that, do some research for cool ways to propagate non-zero exit codes without breaking the command chain. Maybe something in shell syntax or some package from npm. If nothing fits, fall back to &&
.
Blocked by #26. No animation is required, no drag-to-close functionality either. The markup of the bar has already been provided by @alkaitagi.
Acceptance criteria:
For now, it only strips leading zeros of the hour count, doing 1:00:00
instead of 01:00:00
, but it doesn't do it for minutes. We should have durations like 5:00
, not 05:00
.
Implement the layout proposed in #27. Delegate the styling of audio controls to #40.
Acceptance criteria:
/now-playing
Get back to the commented out line in features/playback-controls/ui/scrubbing-bar.svelte
Blocked by #1
Create a sli.dev boilerplate in the presentation
project.
Acceptance criteria:
pnpm dev
in the presentation
project starts sli.dev in dev modeAcceptance criteria:
cast-iu.pages.dev
(cast
is already taken)main
that passes static checks and test suites should update the main deploymentA podcast should be a streamable audio file. In the future, we will add support for transcripts of podcasts, so watch out for that.
We can take a sample audio file from MixKit.
Acceptance criteria:
Artifacts:
Currently, our pre-commit hook checks for ESLint issues and formatting problems. However, TypeScript errors go through freely. Remedy that by adding a pnpm exec svelte-check [...]
to the .husky/pre-commit
file.
P.S. Also an embarrassing detail: our pre-commit
hook doesn't even run currently because it's not marked as executable. Please, mark it as executable while you're at it.
Blocked by #2
Acceptance criteria:
pnpm lint
in the workspace root checks all supported files with Prettier and then runs lint
in app
.pnpm fix
in the workspace root tries to fix all formatting issues and then runs fix
in app
.Blocked by #6
Acceptance criteria:
Blocked by #3
Presentation 1 presents the team, describes the project that we will be building, its features, the tech stack, our ambitions regarding Quality, Reliability and Security. Should also mention what we've done over these two weeks.
Acceptance criteria:
pnpm dev
in the presentation
project opens the presentationThis is for podcasts, not episodes. Also throw in a string field for storing the author.
Acceptance criteria:
Neither the integration tests are passing nor the application works in general.
Which is a fancy way of saying "create pnpm-workspace.yaml
". Create empty projects for the podcast app and the presentation.
Acceptance criteria:
pnpm
detects that there are two projects in the workspaceapp
and presentation
package.json
Acceptance criteria:
Artifacts:
Currently, the CI status badge in the README reflects the last run on a pull request, which is not what we want.
To avoid duplication of configuration that runs tests, refer to the Action Composition guide.
Blocked by #39.
Implement the layout proposed in #29.
Acceptance criteria:
/podcasts/:podcast-id
Blocked by #12
This is to ensure that no code that violates static checkers can be committed.
Acceptance criteria:
pnpm i
(out of the box in Husky)I think the GitHub usernames for the reviewer lottery are case-sensitive. Max was assigned two reviewers, I suppose it is because he's not recognized as vanishmax and instead recognized as VanishMax
Jest has a --ci
option that prevents creation of snapshots โ those should only be created manually. Add this parameter to the code that runs our unit tests in CI. Don't forget that pnpm run
requires an extra --
to denote that the following arguments will be passed to the command that's running.
Acceptance criteria:
Artifacts:
All of these should be implementable without much code by simply bind:
ing to the corresponding attributes on the <audio>
tag, so blocked by #69.
Acceptance criteria:
entities/audio
exposes a writable store for currentTime
that defaults to 0entities/audio
exposes a readable store for duration
that defaults to NaNentities/audio
exposes a writable store for playbackRate
that defaults to 1entities/audio
exposes a writable store for paused
that defaults to true<audio>
DOM nodefeatures/playback-controls
That probably means we no longer require a monorepo, so we should merge the package.json
of app
and the root.
Acceptance criteria:
pnpm-workspace.yaml
is present in the repoPartially blocked by #58.
Acceptance criteria:
Acceptance criteria:
Blocked by #1
Create a SvelteKit boilerplate in the app
project with TypeScript. No Prettier, but with ESLint and svelte-check
.
Acceptance criteria:
pnpm dev
in the app
project starts a SvelteKit applicationpnpm lint
in the app
project runs ESLint on Svelte and TS and then svelte-check
on Sveltepnpm fix
in the app
project runs ESLint on Svelte and TS in fixing modeImplement the layout proposed by #28
Acceptance criteria:
Without it, we cannot detect playing audio with Cypress.
Acceptance criteria:
<audio>
node is present in the global __layout.svelte
Partially blocked by #42. Use svelte-persistent-writable
.
Acceptance criteria:
localStorage
The scrubbing bar, the play/pause button and replay/forward. Stub the necessary APIs of entities/audio
.
Acceptance criteria:
Artifacts:
Per the course requirements, we must have 60% statement coverage for our project. Let's set up Codecov to enforce this threshold.
Acceptance criteria:
Blocked by #6
This should run on each commit to main
that made changes to any of the files in the presentation
project. It should run after the CI for the main
branch successfully passes. The deployment should be made to /presentation
.
Acceptance criteria:
Blocked by #10
We should have an input field that you can enter a URL into (no validation) and that URL is fetched to return an audio file embedded with a native <audio>
element with controls.
Acceptance criteria:
/
Remember about Feature Sliced Design. I'm ready to discuss the architecture if you happen to have any doubts.
This should probably be a single component, a feature in terms of Feature Sliced Design.
Acceptance criteria:
<audio>
element that is in the layout (i.e. it doesn't add its own <audio>
element)P.S. don't spend too much time styling, just use plain HTML
Blocked by #2.
Use Cypress.
Acceptance criteria:
pnpm test:e2e
in the app
project runs the E2E test suiteAcceptance criteria:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.