{"id":15170826,"url":"https://github.com/pavlevujicic/webdevproject","last_synced_at":"2026-01-24T10:37:30.421Z","repository":{"id":213610797,"uuid":"734498782","full_name":"PavleVujicic/WebDevProject","owner":"PavleVujicic","description":"Created a web application to provide exhibition space for artists, to showcase their work and connect artists with the community. ","archived":false,"fork":false,"pushed_at":"2023-12-21T21:46:59.000Z","size":48,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-17T06:15:45.141Z","etag":null,"topics":["css","express-js","html","http","javascript","json","mongodb","mvc-architecture","nodejs","pugjs","restful-api"],"latest_commit_sha":null,"homepage":"https://youtu.be/nEee0bbDUXs","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/PavleVujicic.png","metadata":{"files":{"readme":"README.txt","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-21T20:56:30.000Z","updated_at":"2023-12-21T21:56:01.000Z","dependencies_parsed_at":"2023-12-22T00:52:38.394Z","dependency_job_id":"bd857eb7-1a6a-4a82-b1d1-2db70a7a10a0","html_url":"https://github.com/PavleVujicic/WebDevProject","commit_stats":null,"previous_names":["pavlevujicic/webdevproject"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PavleVujicic%2FWebDevProject","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PavleVujicic%2FWebDevProject/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PavleVujicic%2FWebDevProject/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PavleVujicic%2FWebDevProject/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PavleVujicic","download_url":"https://codeload.github.com/PavleVujicic/WebDevProject/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254227631,"owners_count":22035671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["css","express-js","html","http","javascript","json","mongodb","mvc-architecture","nodejs","pugjs","restful-api"],"created_at":"2024-09-27T08:23:29.197Z","updated_at":"2026-01-24T10:37:30.384Z","avatar_url":"https://github.com/PavleVujicic.png","language":"JavaScript","readme":"##information\n\nName: Pavle Vujicic\nProject Name: “Open Gallery”\nYouTube Link Demonstration: https://youtu.be/nEee0bbDUXs \n\n##Purpose\n\nCreate a web application to provide exhibition space for artists, to showcase their work and connect artists with the community.\nThe application maintains a database of art items and supports two types of users: patrons and artists.\nPatrons can browse all the information on the site, add reviews and “likes” to artworks, “follow” artists and join workshops.\nArtists can add new artwork or host a workshop. Artists and patrons are considered “users”; their accounts have different features.\n\n##List of Files\n\napp.js\ndatabase-init.js\ngallery.json\npackage.json\npackage-lock.json\n\npublic/\ncss.styles\n\nmodels/\nartwork.js\nuser.js\nworkshop.js\n\nviews/\naccount.pug\nadd-artwork-promtp.pug\nadd-workshop.pug\nartist-profile.pug\nartwork.pug\nfollowing.pug\nheader.pug\nlogin.pug\nnotifications.pug\nregister.pug\nsearch.pug\nadd-artwork.pug\nenrollSuccess.pug\nworkshopDetails.pug\n\nroutes/\nartwork.js\nuser.js\nworkshop.js\nartists.js\n\ncontrollers/\nartistController.js\nartworkController.js\nuserController.js\nworkshopController.js\n\nmiddleware/\nauth.js\n\n\n##Installation and Initialization\n\nPrerequisites:\nNode.js and npm:\n\nNode:\nEnsure Node.js and npm are installed on your machine.\n\nMongoDB:\nInstall MongoDB on your machine if not already installed.\n\nInstallation Steps:\n\nUnzip zip file\n\ncd a5\n\nInstall Dependencies:\n\nnpm install\n\nDatabase Initialization:\n\nEnsure that your MongoDB server is running.\nRun the initialization script to populate the database with artwork data:\n\nnode database-init.js\n\n\n##Run the Application\n\nnpm start\n\n##Access the Application\n\nOpen your web browser and go to http://localhost:3000\n\n\n##Overall Design of the Web Application\n\nThe overall design of the web application prioritizes scalability, responsiveness, and maintainability.\nArchitectural choices, such as adopting the MVC pattern and asynchronous programming, contribute to the success of the project.\nThe inclusion of extra functionality enhances user engagement and provides a more dynamic user experience.\nThe design decisions aim to strike a balance between simplicity, security, and user satisfaction.\nThe web application follows an effective use of RESTful design principles, use of proper HTTP status codes, error handling, traditional Model-View-Controller (MVC) architecture, utilizing the Express.js framework for the backend and Pug for the frontend (view).\nMongoDB is used as the database to store user data, artwork information, and other relevant data.\n\n\n##Design decisions\n\nThe design decision made for this project was the use of MVC. \nModel-view-Controller as an intermediary between the model and the view, facilitating communication and delivering functionality and responses.\nWhen an end user initiates a request, the controller, intricately connected to the database, intercepts, and processes the submission.\nThere are many advantages of using MVC for the RESTFUL API. Those advantages are separations of concerns, using MVC separates the application's three components, making the code easier to read and a lot more organized.\nIt creates better testability, when trying to debug or find a mistake in the code, it is a lot easier to find it. \nMVC improves scalability, Implementing the MVC architecture in the Express.js framework for a RESTful API enables seamless horizontal scalability, allowing the application to efficiently expand by incorporating additional servers.\nAnd finally, The MVC architecture offers considerable flexibility in designing and developing applications. Developers have the freedom to select various frameworks and libraries for each component based on their specific requirements and preferences.\nHere is a link for information on MVC: https://www.scaler.com/topics/expressjs-tutorial/creating-mvc-architecture-for-restful-api/?fbclid=IwAR3zW5ucB_SughEZNzkeWlKzEZWo6vmN_5HbMiTrENdj6NZthp2xUhYJuOc \n\n\n##Conclusion\n\nIn conclusion, the web application emerges as a dynamic hub uniting artists and patrons in a vibrant online community.\nWith a database housing a diverse array of artworks, the platform caters to patrons by providing an engaging space for exploration, interaction, and workshop participation.\nSimultaneously, artists benefit from specialized features, enabling them to showcase their creations and host workshops.\nThe application, designed with distinct functionalities for artists and patrons, succeeds in fostering a collaborative and inclusive digital environment, democratizing art and strengthening connections within the artistic community.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavlevujicic%2Fwebdevproject","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavlevujicic%2Fwebdevproject","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavlevujicic%2Fwebdevproject/lists"}