{"id":20375647,"url":"https://github.com/juliolmuller/estante-virtual","last_synced_at":"2026-05-11T15:09:03.210Z","repository":{"id":42487845,"uuid":"202782973","full_name":"juliolmuller/estante-virtual","owner":"juliolmuller","description":"Project developed as part of a challange to front-end developer in HeroSpark.","archived":false,"fork":false,"pushed_at":"2025-01-26T17:11:49.000Z","size":3017,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-26T17:27:30.772Z","etag":null,"topics":["bootstrap","collaborative-library","hero-spark","json-server","vue"],"latest_commit_sha":null,"homepage":"https://estantevirtual.vercel.app/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juliolmuller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-16T18:54:29.000Z","updated_at":"2025-01-26T17:10:14.000Z","dependencies_parsed_at":"2025-01-15T06:15:29.051Z","dependency_job_id":"1c561f14-13b6-4963-9c94-0c89123d7f8a","html_url":"https://github.com/juliolmuller/estante-virtual","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Festante-virtual","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Festante-virtual/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Festante-virtual/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Festante-virtual/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juliolmuller","download_url":"https://codeload.github.com/juliolmuller/estante-virtual/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241924311,"owners_count":20043189,"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":["bootstrap","collaborative-library","hero-spark","json-server","vue"],"created_at":"2024-11-15T01:32:18.784Z","updated_at":"2026-05-11T15:09:03.204Z","avatar_url":"https://github.com/juliolmuller.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  :books: Estante Virtual\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#pencil-objectives\"\u003eObjectives\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#trophy-lessons-learned\"\u003eLessons Learned\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#rocket-technologies--resources\"\u003eTechnologies\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#hammer-setting-up-the-environment\"\u003eEnvironment Setup\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/static/v1?labelColor=000000\u0026color=d8621e\u0026label=created%20at\u0026message=Aug%202019\" alt=\"Creation Date\" /\u003e\n\n  \u003cimg src=\"https://img.shields.io/github/last-commit/juliolmuller/estante-virtual?label=updated%20at\u0026labelColor=000000\u0026color=d8621e\" alt=\"Update Date\" /\u003e\n\n  \u003cimg src=\"https://img.shields.io/github/v/tag/juliolmuller/estante-virtual?label=latest%20version\u0026labelColor=000000\u0026color=d8621e\" alt=\"Latest Version\" /\u003e\n\n  \u003cimg src=\"https://img.shields.io/static/v1?labelColor=000000\u0026color=d8621e\u0026label=PRs\u0026message=welcome\" alt=\"Pull Requests Welcome\" /\u003e\n\n  \u003cimg src=\"https://img.shields.io/github/license/juliolmuller/estante-virtual?labelColor=000000\u0026color=d8621e\" alt=\"Project License\" /\u003e\n\u003c/p\u003e\n\n![Estante Virtual snapshot](https://user-images.githubusercontent.com/44725817/212589260-eed61b60-dda6-47e5-b986-b86173b7bda5.png)\n\nThis application was proposed by [HeroSpark](https://herospark.com/), as part of their recruitment process for frontend developers. The challenge was to build a fully responsive client application using Vue, Vuex, Bootstrap and SASS to consume a simple REST API served by JSON-Server, with basic authentication, CRUD for books and search/filter mechanisms, abusing of creativity.\n\n[Check out the application running!](https://estantevirtual.vercel.app/)\n\n## :pencil: Objectives\n\n- [x] Create a web application using Vue.js and Vuex JavaScript frameworks;\n- [x] Use Bootstrap styles framework and integrate SASS;\n- [x] Require basic authentication mechanism for user to navigate in the application;\n- [x] Allow user to sign up, providing basic info like name, email and password;\n- [x] Dispose of borrowed and loanable books, showing its name and a thumbnail;\n- [x] Allow users to search for saved books;\n- [x] Display book details and allowed actions - borrow, return, edit info (if it belongs to user);\n- [x] Allow user to register new books to add to the bookshelf;\n- [x] Dispose list of books user borrowed;\n- [x] Dispose list of books user made available;\n- [x] MUST have a responsive UI;\n- [ ] Implement automated tests;\n\n## :trophy: Lessons Learned\n\n- Build and run a basic REST API using [JSON-Server](https://github.com/typicode/json-server);\n- `async`/`await` syntax to handle asynchronous calls; :heartpulse:\n- Structuring Vuex modules and functionalities;\n- Use *guards* to access certain routes;\n- Integrate SASS to a Vue project;\n- Overwrite Bootstrap defaults and creating new themes using SASS/SCSS;\n- Deploying a JSON-server application to ~~Heroku~~ ~~Railway~~ **Render**;\n- Deploying a Vue.js app to Vercel Serverless Cloud;\n- Migrating project from Vue 2 to Vue 3, using Composition API and `script setup`;\n- Migrating project from Vuex to Pinia;\n- Migrating project to TypeScript;\n\n## :rocket: Technologies \u0026 Resources\n\n**Frontend:**\n- [Vue.js v3](https://vuejs.org) (originally developed in v2)\n- [Pinia v2](https://pinia.vuejs.org/) (originally developed in [Vuex v3](https://vuex.vuejs.org/))\n- [VueRouter v4](https://router.vuejs.org/) (originally developed in v3)\n- [Axios](https://github.com/axios/axios) (HTTP client)\n- [Bootstrap v5](https://getbootstrap.com/) (originally developed in v4)\n\n**Backend**\n- [Node.js LTS v22](https://nodejs.org/) (originally developed in v12)\n- [Bun.js v1.2.24](https://bun.sh/)\n- [JSON-Server](https://github.com/typicode/json-server)\n- [Render Cloud Server](https://render.com/) (previously deployed on [Heroku](https://heroku.com/) and [Railway](https://railway.app/))\n\n**Development:**\n- [Visual Studio Code](https://code.visualstudio.com/)\n- [Cmder](https://cmder.net/) (terminal emulator)\n- [Vite](https://vite.dev/) and [bun](https://bun.shm/)/NPM scripts routines (originally developed in v4)\n\n## :hammer: Setting up the Environment\n\nBefore running the application copy/rename file `.env.example` as `.env`. The existent value should work already, so no further configuration should be required. When building for production, however, you may want to add a `.env.production` and copy the same variables you have in `.env`, replacing the *localhost* reference to a valid address on the internet, where the API will be available (e.g.: https://estante-virtual.herokuapp.com).\n\nMake sure to have **Node.js 18+** installed in your machine and **bun** (or **npm**) commands available in your terminal, then use the following routines:\n\n```bash\n$ bun         # Download dependencies\n$ bun start   # Run JSON-Server\n$ bun dev     # Run development server for front-end\n$ bun build   # Build files for production\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliolmuller%2Festante-virtual","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliolmuller%2Festante-virtual","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliolmuller%2Festante-virtual/lists"}