{
"$type": "site.standard.document",
"content": {
"$type": "site.standard.content.markdown",
"text": "import Youtube from '../../components/mdx/Youtube.astro'\n\nWell, I recently quit my job so I got free time and this hackathon between [Hashnode](https://hashnode.com) and [Appwrite](https://appwrite.io) is announced. This is clearly a sign. So I decided to build [MoviePlay](https://appwrite.io). Before we get into the trials and tribulations of this project, let's get all the technical stuff out of the way.\n\n## The Idea\n\nHave you ever had a debate with someone as to what is the correct order to watch Star Wars? There's the chronological order, the release order, the machete order\n\n\n\n## Team\n\n- Me\n\n## Tech Stack\n\n- ReactJS & Typescript (ViteJS)\n\n* TailwindCSS & DaisyUI\n\n* [Appwrite Cloud](https://cloud.appwrite.io)\n - Database\n\n - Account\n\n - Functions\n - NodeJS\n\n* Vercel\n\n* [The-Movie-Wrapper](https://www.npmjs.com/package/@matfire/the_movie_wrapper) (I made this one, but still...)\n\n## Look at the code\n\nYou can see the code [here](https://github.com/matfire/movieplay) and see it live [here](https://movieplay.nirah.tech)\n\n## Demo\n\n<Youtube id='8GJyqRNkZrA' />\n\n## On the using of Appwrite\n\nI had already used a self-hosted version of Appwrite and have been tinkering with the closed cloud beta for a bit, so I was already familiar with the tool and will not really talk about onboarding.\n\n### Database\n\nI was a bit disappointed relationships (as of 06/04/2023) are not yet supported on Cloud, so you still need to do all the foreign key constraints by hand, which makes fetching client-side a bit of a hassle.\n\n### Account\n\nI really like how accounts are handled, especially oauth2 stuff; the fact that you can connect multiple providers for the same account seamlessly is pretty cool\n\n### Functions\n\nI needed to use functions to store the number of views a playlist could get. I would have loved a trigger on **database read operations**, but I can see it would probably be too much performance overhead; the way I solved this is when navigating to a page, the page loader function triggers the function to increment the views number.",
"version": "1.0"
},
"path": "/articles/appwrite-hackaton-movieplay",
"publishedAt": "2023-06-10T00:00:00.000Z",
"site": "at://did:plc:dgtaz4vldacvqhvvmdvoc4ad/site.standard.publication/3mfbydibiwc7f",
"tags": [
"reactjs",
"typescript",
"tailwind-css",
"appwrite"
],
"textContent": "import Youtube from '../../components/mdx/Youtube.astro'\n\nWell, I recently quit my job so I got free time and this hackathon between Hashnode and Appwrite is announced. This is clearly a sign. So I decided to build MoviePlay. Before we get into the trials and tribulations of this project, let's get all the technical stuff out of the way.\n\nThe Idea\n\nHave you ever had a debate with someone as to what is the correct order to watch Star Wars? There's the chronological order, the release order, the machete order\n\nTeam\nMe\n\nTech Stack\nReactJS & Typescript (ViteJS)\n\n TailwindCSS & DaisyUI\n\n Appwrite Cloud\nDatabase\nAccount\nFunctions\nNodeJS\n\n Vercel\n\n The-Movie-Wrapper (I made this one, but still...)\n\nLook at the code\n\nYou can see the code here and see it live here\n\nDemo\n\nOn the using of Appwrite\n\nI had already used a self-hosted version of Appwrite and have been tinkering with the closed cloud beta for a bit, so I was already familiar with the tool and will not really talk about onboarding.\n\nDatabase\n\nI was a bit disappointed relationships (as of 06/04/2023) are not yet supported on Cloud, so you still need to do all the foreign key constraints by hand, which makes fetching client-side a bit of a hassle.\n\nAccount\n\nI really like how accounts are handled, especially oauth2 stuff; the fact that you can connect multiple providers for the same account seamlessly is pretty cool\n\nFunctions\n\nI needed to use functions to store the number of views a playlist could get. I would have loved a trigger on database read operations, but I can see it would probably be too much performance overhead; the way I solved this is when navigating to a page, the page loader function triggers the function to increment the views number.",
"title": "Appwrite Hackaton: MoviePlay",
"updatedAt": "2026-05-17T13:09:11.315Z"
}