{"id":15154400,"url":"https://github.com/owenlobato/link_tree","last_synced_at":"2026-02-09T21:34:36.498Z","repository":{"id":216582219,"uuid":"731377175","full_name":"OwenLobato/link_tree","owner":"OwenLobato","description":"This is a web application developed in a MERN stack (MongoDB, Express.js, React.js, Node.js) that provides a platform to manage and share links to your social media profiles and other external resources. It features basic authentication, protected routes, authorization, and a system for managing profiles and links.","archived":false,"fork":false,"pushed_at":"2024-01-10T22:51:05.000Z","size":559,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-28T14:46:17.029Z","etag":null,"topics":["basic-authentication","context-api","deployment","environment-variables","express-js","mongo-db","node-js","react-js","responsive-design","tailwind-css","web-application"],"latest_commit_sha":null,"homepage":"https://link-tree-ad0v.onrender.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OwenLobato.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-12-14T00:21:59.000Z","updated_at":"2024-01-10T23:10:43.000Z","dependencies_parsed_at":"2024-01-11T01:45:13.342Z","dependency_job_id":null,"html_url":"https://github.com/OwenLobato/link_tree","commit_stats":null,"previous_names":["owenlobato/link_tree"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OwenLobato/link_tree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenLobato%2Flink_tree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenLobato%2Flink_tree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenLobato%2Flink_tree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenLobato%2Flink_tree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OwenLobato","download_url":"https://codeload.github.com/OwenLobato/link_tree/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OwenLobato%2Flink_tree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29281968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T19:05:41.198Z","status":"ssl_error","status_checked_at":"2026-02-09T19:05:37.449Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["basic-authentication","context-api","deployment","environment-variables","express-js","mongo-db","node-js","react-js","responsive-design","tailwind-css","web-application"],"created_at":"2024-09-26T17:22:58.159Z","updated_at":"2026-02-09T21:34:36.470Z","avatar_url":"https://github.com/OwenLobato.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Link Tree App\n\nThis is a web application developed in a MERN stack (MongoDB, Express.js, React.js, Node.js) that provides a platform to manage and share links to your social media profiles and other external resources. It features basic authentication, protected routes, authorization, and a system for managing profiles and links.\n\n## Key Features\n\n- **Authentication and authorization**: The application includes a simple authentication system that allows users to log in and access protected routes. Authorization is implemented to ensure each user has access only to manage their own links and data.\n\n- **Personalized dashboard**: Upon logging in, users are redirected to a dashboard displaying a list of registered links and links to associated social media profiles.\n\n- **Link editing**: Users can edit their links by adding a title, URL, and a text-based image (linked to the image URL). While dynamic image loading is not implemented on the server, images can be included using static image paths.\n\n- **User profile**: The application provides a section for users to manage their profiles, including details such as name, bio, profile picture, and links to their social media profiles.\n\n- **Dynamic navbar**: Navigation in the application is managed through a context that controls the navigation bar, adapting based on the user's current route.\n\n- **Responsive design with Tailwind CSS**: The user interface is developed using Tailwind CSS, ensuring an attractive and responsive design that adapts to different devices.\n\n## Project Structure\n\n### Public\n\n- **Images**: Images in any format.\n- **Svgs**: SVG files for the app.\n\n### Server\n\n- **Components**: Entities in the system are handled in this section, structured with Network (endpoint and response), Controller (application logic), and Store (database logic).\n- **Config**: Configuration files for the server are stored in this section.\n- **Middlewares**: Middleware functions are included for verifying user authentication.\n- **Models**: Database models and schemas are defined using Mongoose in this section.\n- **Network**: This part is responsible for managing server routes and responses.\n- **Utils**: It contains useful functions, such as customizing the Error class.\n\n### Client\n\n- **App.jsx**: Configures public and private routes using React Router.\n- **Components**: Application components are organized here, with global components being more generic and module-specific components categorized by section, such as Auth and Users.\n- **Contexts**: This section manages context providers that facilitate the sharing and management of global state across React components.\n- **Hooks**: Custom hooks are provided, including the use of the `utils/requests.js` function, an abstract component for making Axios requests, and custom hooks like `useAuth` that simplify and generalize requests.\n- **Styles**: Global Tailwind styles and specific file styles are located here.\n\n## Environment Variables\n\nBoth the client and server utilize `.env` files to manage environment variables. This approach streamlines configuration for various environments.\n\n### Server .env\n\n```bash\nNODE_ENV=\nPORT=\nAPI_VERSION=\nMONGODB_URI=\nORIGIN=\nPRODUCTION_ORIGIN=\nURL_PRODUCTION=\nJWT_SECRET_KEY=\n```\n\n### Client .env\n\n```bash\nREACT_APP_NODE_ENV=\nREACT_APP_PORT=\nREACT_APP_API_VERSION=\nREACT_APP_AUTH_VERSION=\nREACT_APP_API_URL=\nREACT_APP_API_URL_PRODUCTION=\nREACT_APP_URL=\nREACT_APP_URL_PRODUCTION=\n```\n\n## How to run the project\n\n### Running the Server\n\nFrom the root directory of the project, you can launch the server with the following command:\n\n```bash\nnpm run start-server\n```\n\nThis command takes you to the \"server\" directory, installs dependencies if not already done, and starts the server using \"nodemon.\"\n\n### Running the Client\n\nTo run the client, navigate to the project's root directory and execute the following command:\n\n```bash\nnpm run start-client\n```\n\nThis command installs client dependencies if not already installed and launches the React application using \"react-scripts.\"\n\nEnsure that both the server and client are operational to use the application effectively.\n\n## Production Deployment\n\nThe project is currently deployed on [Render.com](https://dashboard.render.com/) for both the front end (client) and back end (server).\n\n### Front End (Client)\n\nThe deployed front end is accessible at: [https://link-tree-ad0v.onrender.com](https://link-tree-ad0v.onrender.com)\n\n### Back End (Server)\n\nThe deployed back end is accessible at: [https://link-tree-api.onrender.com](https://link-tree-api.onrender.com)\n\n## Screen Examples\n\n- **LogIn**: [Screenshot of the LogIn form].  \n  ![LogIn](https://github.com/OwenLobato/link_tree/assets/74989360/d184ed61-f973-4fab-acac-788d2a6320e5)\n  ![Responsive LogIn](https://github.com/OwenLobato/link_tree/assets/74989360/b1e00548-7dd9-4d0d-ab07-b69d15b0836a)\n\n- **Apply**: [Screenshot of the Apply form].  \n  ![Apply](https://github.com/OwenLobato/link_tree/assets/74989360/861ee873-c45e-4b6d-b3f0-7e081344c055)\n  ![Responsive Apply](https://github.com/OwenLobato/link_tree/assets/74989360/20998a52-da09-4f18-a341-4e3cf7d76c45)\n\n- **Page Not Found**: [Screenshot of the notice indicating that the selected route doesn't exist].  \n  ![PageNotFound](https://github.com/OwenLobato/link_tree/assets/74989360/564ac897-7504-43ee-8529-7bc99167a228)\n  ![Responsive PageNotFound](https://github.com/OwenLobato/link_tree/assets/74989360/a0f902c2-a3bb-488c-90f8-4fcaf121a0b4)\n\n- **Logged nav bar**: [Screenshot of the navbar when user is logged].  \n  ![LoggedNavBar](https://github.com/OwenLobato/link_tree/assets/74989360/0bde6425-fc3a-469a-82cd-faad03e70cdd)\n  ![Responsive LoggedNavBar](https://github.com/OwenLobato/link_tree/assets/74989360/e120e6e4-960e-4175-b97d-db23cc148a67)\n\n- **No logged nav bar**: [Screenshot of the navbar when user is not logged].  \n  ![NoLoggedNavBar](https://github.com/OwenLobato/link_tree/assets/74989360/c8d3773c-4da8-488e-a823-c52c64a53343)\n  ![Responsive NoLoggedNavBar](https://github.com/OwenLobato/link_tree/assets/74989360/0d2b095c-764a-4d59-acf8-ece04e784602)\n\n- **Dashboard**: [Screenshot of the user dashboard].  \n  ![Dashboard](https://github.com/OwenLobato/link_tree/assets/74989360/cf0bcb29-73a5-4a0e-9778-32652d72c974)\n  ![Responsive Dashboard](https://github.com/OwenLobato/link_tree/assets/74989360/79a42808-7f43-40bc-8e76-73563b4912f3)\n\n- **Edit links**: [Screenshot of the links edition].  \n  ![EditLinks](https://github.com/OwenLobato/link_tree/assets/74989360/b156e1b5-9ccc-4e6c-8d0f-cd09250ed367)\n  ![Responsive EditLinks](https://github.com/OwenLobato/link_tree/assets/74989360/301015a4-b6d2-48cb-8148-ff19cd7ffa6a)\n\n- **Edit profile**: [Screenshot of the profile edition].  \n  ![EditProfile](https://github.com/OwenLobato/link_tree/assets/74989360/8f976081-7aca-4fb1-8a97-fdc901a0a78e)\n  ![Responsive EditProfile](https://github.com/OwenLobato/link_tree/assets/74989360/f7268d43-67a9-4a2a-b41c-7deb841def3b)\n\n- **Full link tree**: [Screenshot of the user link tree with data].  \n  ![FullLinkTree](https://github.com/OwenLobato/link_tree/assets/74989360/d026c523-2a89-4289-aa6b-02e7fda4a817)\n  ![Responsive FullLinkTree](https://github.com/OwenLobato/link_tree/assets/74989360/321c6c9b-782e-4957-a5fa-c703c17017b4)\n\n- **Empty link tree**: [Screenshot of the user link tree without data].  \n  ![EmptyLinkTree](https://github.com/OwenLobato/link_tree/assets/74989360/8caabb4c-1671-4710-925e-fe74ef0e57f8)\n  ![Responsive EmptyLinkTree](https://github.com/OwenLobato/link_tree/assets/74989360/bf211d58-06fb-4d18-8947-6dd7e0788232)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenlobato%2Flink_tree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowenlobato%2Flink_tree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenlobato%2Flink_tree/lists"}