Check Out the Audoly Public Web App
Note: The code really has to be private, but I wanted to share how
I structured the project and why I made certain decisions! I can
always show you the code personally if you're interested π
Audoly is a music intelligence platform designed to assist artists and producers in getting their music discovered, playlisted, and charted. The primary tool currently is a Spotify playlist search engine that allows users to search for playlists based on specific criteria and retrieve relevant playlist information, including the playlist creator's contact details.
Audoly includes the following core features:
Feature | Description |
---|---|
Spotify Playlist Search | Users can search for playlists on Spotify based on specific criteria and retrieve relevant playlist information, including the playlist creator's contact details. |
User Authentication | Secure user authentication using NextAuth, integrating Google and Spotify accounts. |
Subscription Management | Stripe integration allows users to upgrade to premium subscriptions for enhanced features and unlimited credits. |
User Profile | Users can manage their profile information, subscription details, and track their usage statistics. |
Audoly is built using the following technologies:
-
Next.js: Utilized for server-side rendering and efficient route management, enhancing performance and search engine optimization. The file-based routing system facilitated straightforward route creation and management.
-
TypeScript: Employed across the codebase to improve code quality and maintainability through static typing. Interfaces and types were used to ensure clear documentation and robust code.
-
Tailwind CSS: Applied for rapid UI development with its utility-first approach, enabling consistent styling and promoting component reusability while maintaining a minimal CSS bundle size.
-
DynamoDB: Chosen for its scalability and performance to store user data and authentication information, supporting flexible data modeling and seamless application integration.
-
Stripe: Integrated for subscription management and payment processing, leveraging its APIs for secure payment handling and efficient billing processes.
-
Spotify Web API: Used to fetch detailed playlist data, enabling users to access comprehensive music-related information directly from Spotify.
-
Vercel: Deployed on Vercel for streamlined deployment and automatic scaling, ensuring high availability and performance through its serverless functions.
To maintain optimal performance and gain insights into user behavior, Audoly employs:
- Google Analytics: Implemented to track user interactions and page views, providing data to inform user behavior analysis and decision-making processes.
- Microsoft Clarity: Utilized for session recording and heatmap analysis to identify areas for UI improvements, enhancing user interaction understanding and guiding interface optimizations.
The project is organized to promote maintainability and scalability:
- The
app
directory contains the main application components and pages. - The
components
directory houses reusable UI components. - The
lib
directory includes utility functions and helper modules. - The
public
directory stores static assets. - The
cdk
directory contains the AWS Cloud Development Kit (CDK) infrastructure code for DynamoDB table creation.
Audoly is a robust platform developed using Next.js, TypeScript, and various third-party services to support musicians in their careers. Its scalable architecture and thoughtful design ensure it meets the needs of a growing user base while providing valuable insights through data analytics.
For any further information or inquiries about Audoly, please reach out to the team. π§π΅
π audoly/
βββ π @types/
β βββ π next-auth.d.ts
βββ π app/
β βββ π api/
β β βββ π auth/
β β β βββ π [...nextauth]/
β β β βββ π authoptions.ts
β β β βββ π route.ts
β β βββ π dynamodb.tsx
β β βββ π spotify/
β β β βββ π search/
β β β β βββ π route.ts
β β β βββ π spotify.tsx
β β βββ π stripe/
β β β βββ π createcheckoutsession/
β β β β βββ π route.ts
β β β βββ π getbillingportal/
β β β β βββ π route.ts
β β β βββ π subscriptionWebhook/
β β β β βββ π route.ts
β β β βββ π types.ts
β β βββ π user/
β β βββ π route.ts
β β βββ π updatename/
β β βββ π route.ts
β βββ π contact/
β β βββ π layout.tsx
β β βββ π page.tsx
β βββ π dashboard/
β β βββ π layout.tsx
β β βββ π page.tsx
β β βββ π spotifyplaylistsearch/
β β βββ π layout.tsx
β β βββ π page.tsx
β β βββ π [query]/
β β βββ π [market]/
β β βββ π [magicsearch]/
β β βββ π [offset]/
β β βββ π loading.tsx
β β βββ π page.tsx
β βββ π (homepage)/
β β βββ π layout.tsx
β β βββ π page.tsx
β βββ π layout.tsx
β βββ π login/
β β βββ π layout.tsx
β β βββ π page.tsx
β βββ π privacypolicy/
β β βββ π layout.tsx
β β βββ π page.tsx
β βββ π profile/
β β βββ π billing/
β β β βββ π loading.tsx
β β β βββ π page.tsx
β β βββ π layout.tsx
β β βββ π myinformation/
β β βββ π page.tsx
β βββ π success/
β β βββ π layout.tsx
β β βββ π page.tsx
β βββ π termsofservice/
β βββ π layout.tsx
β βββ π page.tsx
βββ π cdk/
β βββ π bin/
β β βββ π cdk.ts
β βββ π cdk.json
β βββ π cdk.out/
β β βββ π cdk.out
β β βββ π DynamoDBStack.assets.json
β β βββ π DynamoDBStack.template.json
β β βββ π manifest.json
β β βββ π tree.json
β βββ π jest.config.js
β βββ π lib/
β β βββ π dynamodb-stack.ts
β βββ π package.json
β βββ π README.md
β βββ π test/
β β βββ π cdk.test.ts
β βββ π tsconfig.json
β βββ π yarn.lock
βββ π components/
β βββ π custom/
β β βββ π buttons/
β β β βββ π dynamic-redirect-button.tsx
β β β βββ π static-redirect-button.tsx
β β βββ π cards/
β β β βββ π upgrade-card.tsx
β β βββ π center-column.tsx
β β βββ π login-signup.tsx
β β βββ π pages/
β β β βββ π dashboard/
β β β β βββ π credit-counter.tsx
β β β β βββ π dashboard-redirect.tsx
β β β β βββ π spotifyplaylistsearch/
β β β β βββ π pagination-controls.tsx
β β β β βββ π playlist-table.tsx
β β β β βββ π search-form.tsx
β β β β βββ π search-helpers.ts
β β β βββ π login/
β β β β βββ π login-buttons.tsx
β β β β βββ π login-redirect.tsx
β β β βββ π profile/
β β β β βββ π profile-sidebar.tsx
β β β βββ π tl_layout/
β β β βββ π footer.tsx
β β β βββ π mode-toggle.tsx
β β β βββ π nav-bar.tsx
β β β βββ π next-auth-provider.tsx
β β β βββ π side-navigation.tsx
β β β βββ π theme-provider.tsx
β β β βββ π top-navigation.tsx
β β βββ π scroll-to.tsx
β βββ π ui/
β βββ π accordion.tsx
β βββ π alert-dialog.tsx
β βββ π badge.tsx
β βββ π button.tsx
β βββ π card.tsx
β βββ π command.tsx
β βββ π dialog.tsx
β βββ π dropdown-menu.tsx
β βββ π input.tsx
β βββ π label.tsx
β βββ π navigation-menu.tsx
β βββ π pagination.tsx
β βββ π popover.tsx
β βββ π scroll-area.tsx
β βββ π select.tsx
β βββ π separator.tsx
β βββ π sheet.tsx
β βββ π skeleton.tsx
β βββ π table.tsx
β βββ π textarea.tsx
β βββ π toast.tsx
β βββ π toaster.tsx
β βββ π use-toast.ts
βββ π components.json
βββ π DISPLAY.md
βββ π lib/
β βββ π utils.ts
βββ π next.config.mjs
βββ π next-env.d.ts
βββ π package.json
βββ π postcss.config.mjs
βββ π public/
β βββ π favicon.png
β βββ π googlefc25c951d7703d50.html
β βββ π pngs/
β β βββ π auth-portrait.png
β β βββ π spotify-album-cover.png
β βββ π screenshots/
β β βββ π audoly-screenshot-0.png
β β βββ π audoly-screenshot-1.png
β β βββ π audoly-screenshot-2.png
β βββ π svgs/
β βββ π google-logo.svg
β βββ π spotify-logo.svg
βββ π README.md
βββ π styles/
β βββ π globals.css
βββ π tailwind.config.ts
βββ π tsconfig.json
βββ π yarn.lock