From d25c30a7b2904c5dc26cf033a2e26b3a8340779c Mon Sep 17 00:00:00 2001 From: Akhil Gupta Date: Sat, 29 May 2021 15:20:50 +0530 Subject: [PATCH] first commit --- .github/ISSUE_TEMPLATE/bug_report.md | 34 + .github/workflows/hub.yml | 56 + Dockerfile | 39 + README.md | 192 + Shreenshots.md | 26 + docker-compose.yml | 13 + images/create_expense.jpg | Bin 0 -> 85401 bytes images/create_fillup.jpg | Bin 0 -> 96578 bytes images/screenshot.jpg | Bin 0 -> 92009 bytes images/settings.jpg | Bin 0 -> 134058 bytes images/users.jpg | Bin 0 -> 57612 bytes images/vehicle_detail.jpg | Bin 0 -> 131201 bytes images/vehicles_add.jpg | Bin 0 -> 97515 bytes server/.env | 3 + server/.gitignore | 21 + server/Dockerfile | 41 + server/common/utils.go | 89 + server/controllers/auth.go | 179 + server/controllers/files.go | 157 + server/controllers/masters.go | 64 + server/controllers/middlewares.go | 71 + server/controllers/setup.go | 70 + server/controllers/users.go | 22 + server/controllers/vehicle.go | 436 + server/db/base.go | 22 + server/db/clarkson.go | 223 + server/db/db.go | 58 + server/db/dbModels.go | 192 + server/db/dbfunctions.go | 304 + server/db/enums.go | 111 + server/db/migrations.go | 43 + server/go.mod | 20 + server/go.sum | 110 + server/internal/sanitize/.gitignore | 22 + server/internal/sanitize/LICENSE | 27 + server/internal/sanitize/README.md | 62 + server/internal/sanitize/sanitize.go | 388 + server/main.go | 80 + server/models/auth.go | 30 + server/models/currency.go | 849 + server/models/errors.go | 11 + server/models/files.go | 5 + server/models/misc.go | 12 + server/models/vehicle.go | 150 + server/service/fileService.go | 236 + server/service/miscService.go | 30 + server/service/userService.go | 47 + server/service/vehicleService.go | 234 + ui/.browserslistrc | 2 + ui/.dockerignore | 2 + ui/.env | 1 + ui/.eslintignore | 2 + ui/.eslintrc.js | 81 + ui/.gitattributes | 44 + ui/.gitignore | 31 + ui/.markdownlint.yml | 17 + ui/.postcssrc.js | 5 + ui/.prettierignore | 3 + ui/.prettierrc.js | 17 + ui/.vscode/_components.code-snippets | 30 + ui/.vscode/_sfc-blocks.code-snippets | 26 + ui/.vscode/extensions.json | 37 + ui/.vscode/settings.json | 93 + ui/.vuepress/config.js | 21 + ui/Dockerfile | 12 + ui/README.md | 191 + ui/aliases.config.js | 74 + ui/babel.config.js | 4 + ui/cypress.json | 3 + ui/docker-compose.yml | 16 + ui/docker-dev.dockerfile | 15 + ui/docs/architecture.md | 93 + ui/docs/development.md | 146 + ui/docs/editors.md | 32 + ui/docs/linting.md | 63 + ui/docs/production.md | 17 + ui/docs/routing.md | 17 + ui/docs/state.md | 66 + ui/docs/tech.md | 289 + ui/docs/tests.md | 219 + ui/docs/troubleshooting.md | 44 + ui/generators/new/component/component.ejs.t | 31 + ui/generators/new/component/prompt.js | 45 + ui/generators/new/component/unit.ejs.t | 16 + ui/generators/new/e2e/e2e.ejs.t | 6 + ui/generators/new/e2e/prompt.js | 13 + ui/generators/new/layout/layout.ejs.t | 18 + ui/generators/new/layout/prompt.js | 13 + ui/generators/new/layout/unit.ejs.t | 19 + ui/generators/new/module/module.ejs.t | 10 + ui/generators/new/module/prompt.js | 13 + ui/generators/new/module/unit.ejs.t | 13 + ui/generators/new/util/prompt.js | 13 + ui/generators/new/util/unit.ejs.t | 14 + ui/generators/new/util/util.ejs.t | 9 + ui/generators/new/view/prompt.js | 18 + ui/generators/new/view/unit.ejs.t | 13 + ui/generators/new/view/view.ejs.t | 31 + ui/jest.config.js | 54 + ui/jsconfig.template.js | 15 + ui/lint-staged.config.js | 16 + ui/package-lock.json | 22010 ++++++++++++++++ ui/package.json | 93 + ui/package.json.md | 75 + ui/public/hammond.png | Bin 0 -> 463 bytes ui/public/index.html | 16 + ui/src/app.config.json | 4 + ui/src/app.vue | 35 + ui/src/assets/images/logo.png | Bin 0 -> 6849 bytes ui/src/components/_base-button.unit.js | 13 + ui/src/components/_base-button.vue | 5 + ui/src/components/_base-icon.unit.js | 30 + ui/src/components/_base-icon.vue | 47 + ui/src/components/_base-input-text.unit.js | 45 + ui/src/components/_base-input-text.vue | 48 + ui/src/components/_base-link.unit.js | 139 + ui/src/components/_base-link.vue | 81 + ui/src/components/_globals.js | 36 + ui/src/components/createQuickEntry.vue | 122 + ui/src/components/nav-bar-routes.unit.js | 57 + ui/src/components/nav-bar-routes.vue | 62 + ui/src/components/nav-bar.unit.js | 28 + ui/src/components/nav-bar.vue | 81 + ui/src/components/quickEntryDisplay.vue | 68 + ui/src/components/shareVehicle.vue | 68 + ui/src/components/statsWidget.vue | 149 + ui/src/design/_colors.scss | 16 + ui/src/design/_durations.scss | 1 + ui/src/design/_fonts.scss | 21 + ui/src/design/_layers.scss | 6 + ui/src/design/_sizes.scss | 19 + ui/src/design/_typography.scss | 416 + ui/src/design/index.scss | 22 + ui/src/main.js | 76 + ui/src/router/index.js | 135 + ui/src/router/layouts/main.unit.js | 13 + ui/src/router/layouts/main.vue | 14 + ui/src/router/routes.js | 466 + ui/src/router/views/_404.unit.js | 7 + ui/src/router/views/_404.vue | 35 + ui/src/router/views/_loading.unit.js | 7 + ui/src/router/views/_loading.vue | 39 + ui/src/router/views/_timeout.unit.js | 7 + ui/src/router/views/_timeout.vue | 46 + ui/src/router/views/createExpense.vue | 243 + ui/src/router/views/createFillup.vue | 299 + ui/src/router/views/createVehicle.vue | 181 + ui/src/router/views/home.unit.js | 12 + ui/src/router/views/home.vue | 161 + ui/src/router/views/initialize.vue | 261 + ui/src/router/views/login.unit.js | 79 + ui/src/router/views/login.vue | 92 + ui/src/router/views/profile.unit.js | 17 + ui/src/router/views/profile.vue | 35 + ui/src/router/views/quickEntries.vue | 111 + ui/src/router/views/settings.vue | 207 + ui/src/router/views/siteSettings.vue | 95 + ui/src/router/views/users.vue | 176 + ui/src/router/views/vehicle.vue | 411 + ui/src/state/helpers.js | 10 + ui/src/state/modules/auth.js | 95 + ui/src/state/modules/auth.unit.js | 121 + ui/src/state/modules/index.js | 81 + ui/src/state/modules/users.js | 88 + ui/src/state/modules/users.unit.js | 64 + ui/src/state/modules/utils.js | 49 + ui/src/state/modules/vehicles.js | 150 + ui/src/state/store.js | 21 + .../utils/dispatch-action-for-all-modules.js | 40 + .../dispatch-action-for-all-modules.unit.js | 138 + ui/src/utils/format-date-relative.js | 8 + ui/src/utils/format-date-relative.unit.js | 30 + ui/src/utils/format-date.js | 15 + ui/src/utils/format-date.unit.js | 21 + ui/stylelint.config.js | 50 + ui/tests/e2e/.eslintrc.js | 6 + ui/tests/e2e/plugins/index.js | 55 + ui/tests/e2e/specs/auth.e2e.js | 82 + ui/tests/e2e/specs/home.e2e.js | 7 + ui/tests/e2e/specs/profile.e2e.js | 33 + ui/tests/e2e/support/commands.js | 19 + ui/tests/e2e/support/setup.js | 17 + ui/tests/e2e/support/utils.js | 2 + ui/tests/mock-api/index.js | 13 + ui/tests/mock-api/resources/users.js | 42 + ui/tests/mock-api/routes/auth.js | 33 + ui/tests/mock-api/routes/users.js | 24 + ui/tests/unit/__mocks__/.keep | 0 ui/tests/unit/global-setup.js | 14 + ui/tests/unit/global-teardown.js | 7 + ui/tests/unit/matchers.js | 105 + ui/tests/unit/setup.js | 209 + ui/vue.config.js | 42 + ui/yarn.lock | 14272 ++++++++++ 194 files changed, 49873 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/workflows/hub.yml create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 Shreenshots.md create mode 100644 docker-compose.yml create mode 100644 images/create_expense.jpg create mode 100644 images/create_fillup.jpg create mode 100644 images/screenshot.jpg create mode 100644 images/settings.jpg create mode 100644 images/users.jpg create mode 100644 images/vehicle_detail.jpg create mode 100644 images/vehicles_add.jpg create mode 100644 server/.env create mode 100644 server/.gitignore create mode 100644 server/Dockerfile create mode 100644 server/common/utils.go create mode 100644 server/controllers/auth.go create mode 100644 server/controllers/files.go create mode 100644 server/controllers/masters.go create mode 100644 server/controllers/middlewares.go create mode 100644 server/controllers/setup.go create mode 100644 server/controllers/users.go create mode 100644 server/controllers/vehicle.go create mode 100644 server/db/base.go create mode 100644 server/db/clarkson.go create mode 100644 server/db/db.go create mode 100644 server/db/dbModels.go create mode 100644 server/db/dbfunctions.go create mode 100644 server/db/enums.go create mode 100644 server/db/migrations.go create mode 100644 server/go.mod create mode 100644 server/go.sum create mode 100644 server/internal/sanitize/.gitignore create mode 100644 server/internal/sanitize/LICENSE create mode 100644 server/internal/sanitize/README.md create mode 100644 server/internal/sanitize/sanitize.go create mode 100644 server/main.go create mode 100644 server/models/auth.go create mode 100644 server/models/currency.go create mode 100644 server/models/errors.go create mode 100644 server/models/files.go create mode 100644 server/models/misc.go create mode 100644 server/models/vehicle.go create mode 100644 server/service/fileService.go create mode 100644 server/service/miscService.go create mode 100644 server/service/userService.go create mode 100644 server/service/vehicleService.go create mode 100644 ui/.browserslistrc create mode 100644 ui/.dockerignore create mode 100644 ui/.env create mode 100644 ui/.eslintignore create mode 100644 ui/.eslintrc.js create mode 100644 ui/.gitattributes create mode 100644 ui/.gitignore create mode 100644 ui/.markdownlint.yml create mode 100644 ui/.postcssrc.js create mode 100644 ui/.prettierignore create mode 100644 ui/.prettierrc.js create mode 100644 ui/.vscode/_components.code-snippets create mode 100644 ui/.vscode/_sfc-blocks.code-snippets create mode 100644 ui/.vscode/extensions.json create mode 100644 ui/.vscode/settings.json create mode 100644 ui/.vuepress/config.js create mode 100644 ui/Dockerfile create mode 100644 ui/README.md create mode 100644 ui/aliases.config.js create mode 100644 ui/babel.config.js create mode 100644 ui/cypress.json create mode 100644 ui/docker-compose.yml create mode 100644 ui/docker-dev.dockerfile create mode 100644 ui/docs/architecture.md create mode 100644 ui/docs/development.md create mode 100644 ui/docs/editors.md create mode 100644 ui/docs/linting.md create mode 100644 ui/docs/production.md create mode 100644 ui/docs/routing.md create mode 100644 ui/docs/state.md create mode 100644 ui/docs/tech.md create mode 100644 ui/docs/tests.md create mode 100644 ui/docs/troubleshooting.md create mode 100644 ui/generators/new/component/component.ejs.t create mode 100644 ui/generators/new/component/prompt.js create mode 100644 ui/generators/new/component/unit.ejs.t create mode 100644 ui/generators/new/e2e/e2e.ejs.t create mode 100644 ui/generators/new/e2e/prompt.js create mode 100644 ui/generators/new/layout/layout.ejs.t create mode 100644 ui/generators/new/layout/prompt.js create mode 100644 ui/generators/new/layout/unit.ejs.t create mode 100644 ui/generators/new/module/module.ejs.t create mode 100644 ui/generators/new/module/prompt.js create mode 100644 ui/generators/new/module/unit.ejs.t create mode 100644 ui/generators/new/util/prompt.js create mode 100644 ui/generators/new/util/unit.ejs.t create mode 100644 ui/generators/new/util/util.ejs.t create mode 100644 ui/generators/new/view/prompt.js create mode 100644 ui/generators/new/view/unit.ejs.t create mode 100644 ui/generators/new/view/view.ejs.t create mode 100644 ui/jest.config.js create mode 100644 ui/jsconfig.template.js create mode 100644 ui/lint-staged.config.js create mode 100644 ui/package-lock.json create mode 100644 ui/package.json create mode 100644 ui/package.json.md create mode 100644 ui/public/hammond.png create mode 100644 ui/public/index.html create mode 100644 ui/src/app.config.json create mode 100644 ui/src/app.vue create mode 100644 ui/src/assets/images/logo.png create mode 100644 ui/src/components/_base-button.unit.js create mode 100644 ui/src/components/_base-button.vue create mode 100644 ui/src/components/_base-icon.unit.js create mode 100644 ui/src/components/_base-icon.vue create mode 100644 ui/src/components/_base-input-text.unit.js create mode 100644 ui/src/components/_base-input-text.vue create mode 100644 ui/src/components/_base-link.unit.js create mode 100644 ui/src/components/_base-link.vue create mode 100644 ui/src/components/_globals.js create mode 100644 ui/src/components/createQuickEntry.vue create mode 100644 ui/src/components/nav-bar-routes.unit.js create mode 100644 ui/src/components/nav-bar-routes.vue create mode 100644 ui/src/components/nav-bar.unit.js create mode 100644 ui/src/components/nav-bar.vue create mode 100644 ui/src/components/quickEntryDisplay.vue create mode 100644 ui/src/components/shareVehicle.vue create mode 100644 ui/src/components/statsWidget.vue create mode 100644 ui/src/design/_colors.scss create mode 100644 ui/src/design/_durations.scss create mode 100644 ui/src/design/_fonts.scss create mode 100644 ui/src/design/_layers.scss create mode 100644 ui/src/design/_sizes.scss create mode 100644 ui/src/design/_typography.scss create mode 100644 ui/src/design/index.scss create mode 100644 ui/src/main.js create mode 100644 ui/src/router/index.js create mode 100644 ui/src/router/layouts/main.unit.js create mode 100644 ui/src/router/layouts/main.vue create mode 100644 ui/src/router/routes.js create mode 100644 ui/src/router/views/_404.unit.js create mode 100644 ui/src/router/views/_404.vue create mode 100644 ui/src/router/views/_loading.unit.js create mode 100644 ui/src/router/views/_loading.vue create mode 100644 ui/src/router/views/_timeout.unit.js create mode 100644 ui/src/router/views/_timeout.vue create mode 100644 ui/src/router/views/createExpense.vue create mode 100644 ui/src/router/views/createFillup.vue create mode 100644 ui/src/router/views/createVehicle.vue create mode 100644 ui/src/router/views/home.unit.js create mode 100644 ui/src/router/views/home.vue create mode 100644 ui/src/router/views/initialize.vue create mode 100644 ui/src/router/views/login.unit.js create mode 100644 ui/src/router/views/login.vue create mode 100644 ui/src/router/views/profile.unit.js create mode 100644 ui/src/router/views/profile.vue create mode 100644 ui/src/router/views/quickEntries.vue create mode 100644 ui/src/router/views/settings.vue create mode 100644 ui/src/router/views/siteSettings.vue create mode 100644 ui/src/router/views/users.vue create mode 100644 ui/src/router/views/vehicle.vue create mode 100644 ui/src/state/helpers.js create mode 100644 ui/src/state/modules/auth.js create mode 100644 ui/src/state/modules/auth.unit.js create mode 100644 ui/src/state/modules/index.js create mode 100644 ui/src/state/modules/users.js create mode 100644 ui/src/state/modules/users.unit.js create mode 100644 ui/src/state/modules/utils.js create mode 100644 ui/src/state/modules/vehicles.js create mode 100644 ui/src/state/store.js create mode 100644 ui/src/utils/dispatch-action-for-all-modules.js create mode 100644 ui/src/utils/dispatch-action-for-all-modules.unit.js create mode 100644 ui/src/utils/format-date-relative.js create mode 100644 ui/src/utils/format-date-relative.unit.js create mode 100644 ui/src/utils/format-date.js create mode 100644 ui/src/utils/format-date.unit.js create mode 100644 ui/stylelint.config.js create mode 100644 ui/tests/e2e/.eslintrc.js create mode 100644 ui/tests/e2e/plugins/index.js create mode 100644 ui/tests/e2e/specs/auth.e2e.js create mode 100644 ui/tests/e2e/specs/home.e2e.js create mode 100644 ui/tests/e2e/specs/profile.e2e.js create mode 100644 ui/tests/e2e/support/commands.js create mode 100644 ui/tests/e2e/support/setup.js create mode 100644 ui/tests/e2e/support/utils.js create mode 100644 ui/tests/mock-api/index.js create mode 100644 ui/tests/mock-api/resources/users.js create mode 100644 ui/tests/mock-api/routes/auth.js create mode 100644 ui/tests/mock-api/routes/users.js create mode 100644 ui/tests/unit/__mocks__/.keep create mode 100644 ui/tests/unit/global-setup.js create mode 100644 ui/tests/unit/global-teardown.js create mode 100644 ui/tests/unit/matchers.js create mode 100644 ui/tests/unit/setup.js create mode 100644 ui/vue.config.js create mode 100644 ui/yarn.lock diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..75681b2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +*Before creating a bug report please make sure you are using the latest docker image / code base.* + +**Please complete the following information** + - Installation Type: [Docker/Native] + - Have you tried using the latest docker image / code base [yes/no] + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + + +**Additional context** +Add any other context about the problem here. diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml new file mode 100644 index 0000000..2a5ecb7 --- /dev/null +++ b/.github/workflows/hub.yml @@ -0,0 +1,56 @@ +name: ci + +on: + push: + branches: master + +jobs: + multi: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - + name: Set up build cache + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - + name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Login to GitHub + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + - + name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + #platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 + platforms: linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7 + push: true + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + tags: | + akhilrex/hammond:latest + akhilrex/hammond:1.0.0 + ghcr.io/akhilrex/hammond:latest + ghcr.io/akhilrex/hammond:1.0.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..75c9747 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +ARG GO_VERSION=1.15.2 +FROM golang:${GO_VERSION}-alpine AS builder +RUN apk update && apk add alpine-sdk git && rm -rf /var/cache/apk/* +RUN mkdir -p /api +WORKDIR /api +COPY ./server/go.mod . +COPY ./server/go.sum . +RUN go mod download +COPY ./server . +RUN go build -o ./app ./main.go + +FROM node:latest as build-stage +WORKDIR /app +COPY ./ui/package*.json ./ +RUN npm install +COPY ./ui . +RUN npm run build + + +FROM alpine:latest +LABEL org.opencontainers.image.source="https://github.com/akhilrex/hammond" +ENV CONFIG=/config +ENV DATA=/assets +ENV UID=998 +ENV PID=100 +ENV GIN_MODE=release +VOLUME ["/config", "/assets"] +RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/* +RUN mkdir -p /config; \ + mkdir -p /assets; \ + mkdir -p /api +RUN chmod 777 /config; \ + chmod 777 /assets +WORKDIR /api +COPY --from=builder /api/app . +#COPY dist ./dist +COPY --from=build-stage /app/dist ./dist +EXPOSE 3000 +ENTRYPOINT ["./app"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f9adcfc --- /dev/null +++ b/README.md @@ -0,0 +1,192 @@ +[![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![MIT License][license-shield]][license-url] [![LinkedIn][linkedin-shield]][linkedin-url] + + +
+

+ + +

Hammond

+

Current Version - 2021.05.07

+ +

+ A self-hosted vehicle expense tracking system with support for multiple users. +
+ Explore the docs » +
+
+ + Report Bug + · + Request Feature + · + Screenshots +

+

+ + + +## Table of Contents + +- [About the Project](#about-the-project) + - [Motivation](#motivation) + - [Built With](#built-with) + - [Features](#features) +- [Installation](#installation) +- [License](#license) +- [Roadmap](#roadmap) +- [Contact](#contact) + + + +## About The Project + +Hammond is a self hosted vehicle management system to track fuel and other expenses related to all of your vehicles. It supports multiple users sharing multiple vehicles. It is the logical successor to Clarkson which has not been updated for quite some time now. + +_Developers Note: This project is under active development which means I release new updates very frequently. It is recommended that you use something like [watchtower](https://github.com/containrrr/watchtower) which will automatically update your containers whenever I release a new version or periodically rebuild the container with the latest image manually._ + +### Motivation and Developer Notes + +I was looking for a fuel tracking system and stumbled upon Clarkson. Although it did most of what I needed it has not been updated for quite a lot of time. Since I had some bandwidth available as my previous open source project [Podgrab](http://github.com/akhilrex/podgrab) had become quite stable now, my first thought was to contribute to the Clarkson project only. I soon realized that the architecture that Clarkson had used was not really be that extensible now and would warrant a complete rewrite only. So I decided to build Hammond - The successor to Clarkson. + +The current version of Hammond is written using GO for backend and Vuejs for the front end. Originally I had thought of using the same tech stack for both frontend and the backend so that it became easier for users and other developers to use, deploy and contribute. Which is why the first version of Hammond has a NestJS backend complete with all the bells and whistles (GraphQL, Prisma and what nots). But I eventually decided to rebuild the backend in GO just to keep the container size small. No matter how much you can optimize the sheer size of the node_modules will always add bulk to your containers. I host all my tools on my Raspberry Pi. It only makes sense to keep the container size as small as possible. + +Also I had initially thought of a 2 container approach (1 for backend and 1 for the frontend) so that they can be independently maintained and updated. I eventually decided against this idea for the sake of simplicity. Although it is safe to assume that most self-hosters are fairly tech capable it still is much better to have a single container that you can fire and forget. + +![Product Name Screen Shot][product-screenshot] [More Screenshots](Screenshots.md) + +### Built With + +- [Go](https://golang.org/) +- [Go-Gin](https://github.com/gin-gonic/gin) +- [GORM](https://github.com/go-gorm/gorm) +- [SQLite](https://www.sqlite.org/index.html) +- [VueJS](https://vuejs.org/) +- [Vuex](https://vuex.vuejs.org/) +- [Buefy](https://buefy.org/) + +### Features + +- Migrate data from Clarkson +- Add/Manage multiple vehicles +- Add/Manage multiple users +- Track fuel and other expenses +- Share vehicles across multiple users +- Save attachment against vehicles +- Quick Entries (take a photo of a receipt or pump screen to make entry later) +- Vehicle level and overall reporting + +## Installation + +The easiest way to run Hammond is to run it as a docker container. + +### Using Docker + +Simple setup without mounted volumes (for testing and evaluation) + +```sh + docker run -d -p 8080:8080 --name=hammond akhilrex/hammond +``` + +Binding local volumes to the container + +```sh + docker run -d -p 8080:8080 --name=hammond -v "/host/path/to/assets:/assets" -v "/host/path/to/config:/config" akhilrex/hammond +``` + +### Using Docker-Compose + +Modify the docker compose file provided [here](https://github.com/akhilrex/hammond/blob/master/docker-compose.yml) to update the volume and port binding and run the following command + +```yaml +version: '2.1' +services: + hammond: + image: akhilrex/hammond + container_name: hammond + volumes: + - /path/to/config:/config + - /path/to/data:/assets + ports: + - 8080:8080 + restart: unless-stopped +``` + +```sh + docker-compose up -d +``` + + + +### Environment Variables + +| Name | Description | Default | +| ---- | -------------------------------------------------------------------------------------------------------------------------- | ------- | +| PORT | Change the internal port of the application. If you change this you might have to change your docker configuration as well | (empty) | + +### Setup + +When you open Hammond for the first time after a fresh install, you will be presented with the option to either import data from an existing Clarkson instance or setup a fresh instance. + +#### Migration from Clarkson + +You will have to ensure that the Clarkson database is accessible from the Hammond deployment. In case it is not directly possible, you can always take a backup of the Clarkson database and host it somewhere accessible to Hammond using a temporary container. If the access problem is sorted, you will have to enter the connection string the Clarkson database in the following format. + +``` + user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local +``` + +You can check the connectivity from the screen as well. + +Note: All the users migrated from Clarkson will have their passwords changed to `hammond` + +#### Fresh setup + +You will have to provide your name, email and password so that an admin user can be created for you. + +Once done you will be taken to the login page. + +Go through the settings page once and change relevant settings before you start adding vehicles and expenses. + +## License + +Distributed under the GPL-3.0 License. See `LICENSE` for more information. + +## Roadmap + +- [ ] More reports +- [ ] Vehicle specific reminders (servicing etc) +- [ ] Native installer for Windows/Linux/MacOS + + + +## Contact + +Akhil Gupta - [@akhilrex](https://twitter.com/akhilrex) + +Project Link: [https://github.com/akhilrex/hammond](https://github.com/akhilrex/hammond) + +Buy Me A Coffee + + + + +[contributors-shield]: https://img.shields.io/github/contributors/akhilrex/hammond.svg?style=flat-square +[contributors-url]: https://github.com/akhilrex/hammond/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/akhilrex/hammond.svg?style=flat-square +[forks-url]: https://github.com/akhilrex/hammond/network/members +[stars-shield]: https://img.shields.io/github/stars/akhilrex/hammond.svg?style=flat-square +[stars-url]: https://github.com/akhilrex/hammond/stargazers +[issues-shield]: https://img.shields.io/github/issues/akhilrex/hammond.svg?style=flat-square +[issues-url]: https://github.com/akhilrex/hammond/issues +[license-shield]: https://img.shields.io/github/license/akhilrex/hammond.svg?style=flat-square +[license-url]: https://github.com/akhilrex/hammond/blob/master/LICENSE.txt +[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555 +[linkedin-url]: https://linkedin.com/in/akhilrex +[product-screenshot]: images/screenshot.jpg diff --git a/Shreenshots.md b/Shreenshots.md new file mode 100644 index 0000000..0bdb21d --- /dev/null +++ b/Shreenshots.md @@ -0,0 +1,26 @@ +## Home Page / Summary + +![Product Name Screen Shot][product-screenshot] + +## Add Podcast + +![Podcast Episodes](images/add_podcast.jpg) + +## All Episodes Chronologically + +![All Episodes](images/all_episodes.jpg) + +## Podcast Episodes + +![Podcast Episodes](images/podcast_episodes.jpg) + + +## Player + +![Player](images/player.jpg) + +## Settings + +![Podcast Episodes](images/settings.jpg) + +[product-screenshot]: images/screenshot.jpg diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c029931 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: "2.1" +services: + hammond: + image: akhilrex/hammond + container_name: hammond + environment: + - CHECK_FREQUENCY=240 + volumes: + - /path/to/config:/config + - /path/to/data:/assets + ports: + - 8080:8080 + restart: unless-stopped diff --git a/images/create_expense.jpg b/images/create_expense.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0320468a4373b483dc4576a4d14ba109b057bbf0 GIT binary patch literal 85401 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