GrepBase is a simple JSON file database with an express backend and a Vue.js frontend. It is handy for adding dummy data to test your apps during development.
Here is an example of the database file (backend/data.json) with data added:
{ "mystore": [ ], "My Favorite Songs": [ { "id": 1, "title": "Title One", "Artist": "Some Artist", "Genre": "Electronic", "Year": 2013, "Duration": "4:07", "Album": "Another Album" }, { "id": "2", "title": "Title Two", "Artist": "Other Artist", "Genre": "Rock", "Year": "2013", "Duration": "4:24", "Album": "Next Album" } ] }Each key represents a store. Every store has a value array containing items (objects). Items added to a store via the API/ Frontend UI is auto assigned a unique ID.
The API provides user authentication, media upload, and JSON-based key-value storage using local files. Below is a list of available API routes grouped by functionality.
GET /check-session
Check if a user is currently authenticated.
Response:
200 OK: { user } 401 Unauthorized: { error }POST /sign-in
Sign in using a username and password.
Request body:
{ "username": "user", "password": "pass" }Response:
200 OK: { message, user } 401 Unauthorized: { error }GET /sign-out
Sign out the current user.
Response:
200 OK: { message } 401 Unauthorized: { error }POST /sign-up
Register a new user.
Request body:
{ "username": "user", "password": "pass" }Response:
200 OK: { message } 409 Conflict: { error } 500 Internal Server Error: { error }POST /create-store/:storeName
Create a new store with the specified name.
Response:
200 OK: { message } 500 Internal Server Error: { error }GET /get-stores
Get the list of all store names.
Response:
200 OK: [ "store1", "store2" ] 500 Internal Server Error: { error }PATCH /rename-store/:oldStoreName/:newStoreName
Rename an existing store.
Response:
200 OK: { message } 500 Internal Server Error: { error }DELETE /delete-store/:storeName
Delete a store by name.
Response:
200 OK: { message } 500 Internal Server Error: { error }POST /create-store-item/:storeName
Add an item to a store. Request body: JSON object with arbitrary fields. For example:
{ "id": "1", "First Name": "Joe", "Last Name": "Fisher", "Date of Birth": "10th June 2001", "Company": "Acme Inc.", "Salary": "75,0000", "Date Started": "April 03 2023", "Date Ended": "-", "Employee Score": "78/100" }Response:
201 Created: { message } 404 Not Found: { error }GET /get-store-items/:storeName
Get items in a store with a mediaType key.
Response:
200 OK: [ item1, item2 ] 404 Not Found: { error }PATCH /edit-store-item/:storeName
Edit a store item (by id). Request body: Full updated item object
Response:
201 Created: { message } 404 Not Found: { error }DELETE /delete-store-item/:storeName/:itemId
Delete an item from a store by ID.
Response:
200 OK: { message } 404 Not Found: { error }POST /upload-media-item/:storeName
Upload a media file to a store.
Form Data:
-
file: File (required)
-
mediaType: string (e.g., "image")
Response:
201 Created: { message } 400 Bad Request: { error }GET /get-media-items/:storeName/:mediaType
Get media items by type from a store.
Response:
200 OK: [ mediaItem1, mediaItem2 ] 400 Bad Request: { error }DELETE /delete-media-item/:storeName/:mediaId
Delete a media item by ID and remove the file.
Response:
200 OK: { message, deletedMedia } 404 Not Found: { error } 500 Internal Server Error: { error }GET /uploads/:filename
Static file serving for uploaded media. Usage: Access uploaded files at /uploads/filename.ext
-
Express session uses SQLite for persistence.
-
Authentication is handled via Passport.js with a local strategy.
-
JSON-based store is saved and read using local file I/O.
cd frontend npm run devcd backend npm run dev-
Install Docker Desktop. This will install docker on your system.
-
Follow the instructions below to build and run the backend and frontend containers:
docker build --no-cache -t grepbase-backend -f Dockerfile.backend .docker run -d -p 3000:3000 grepbase-backenddocker build --no-cache -t grepbase-frontend -f Dockerfile.frontend .docker run -d -p 8080:80 grepbase-frontend