GithubHelp home page GithubHelp logo

ellite / wallos Goto Github PK

View Code? Open in Web Editor NEW
1.8K 9.0 83.0 3.55 MB

Wallos: Open-Source Personal Subscription Tracker

License: GNU General Public License v3.0

Dockerfile 0.18% PHP 80.13% Hack 0.20% JavaScript 11.78% Shell 0.12% CSS 7.59%

wallos's Introduction

Wallos

Wallos: Open-Source Personal Subscription Tracker

Table of Contents

Introduction

Wallos is a powerful, open-source, and self-hostable web application designed to empower you in managing your finances with ease. Say goodbye to complicated spreadsheets and expensive financial software – Wallos simplifies the process of tracking expenses and helps you gain better control over your financial life.

Features

  • Subscription Management: Keep track of your recurring subscriptions and payments, ensuring you never miss a due date.
  • Category Management: Organize your expenses into customizable categories, enabling you to gain insights into your spending habits.
  • Multi-Currency support: Wallos supports multiple currencies, allowing you to manage your finances in the currency of your choice.
  • Currency Conversion: Integrates with the Fixer API so you can get exchange rates and see all your subscriptions on your main currency.
  • Data Privacy: As a self-hosted application, Wallos ensures that your financial data remains private and secure on your own server.
  • Customization: Tailor Wallos to your needs with customizable categories, currencies, themes and other display options.
  • Sorting Options: Allowing you to view your subscriptions from different perspectives.
  • Logo Search: Wallos can search the web for the logo of your subscriptions if you don't have them available for upload.
  • Mobile view: Wallos on the go.
  • Statistics: Another perspective into your spendings.
  • Notifications: Wallos supports multiple notification methods (email, discord, pushover, telegram, gotify and webhooks). Get notified about your upcoming payments.
  • Multi Language support.

Getting Started

See instructions to run Wallos below.

Prerequisites

Baremetal

  • NGINX or APACHE websever running
  • PHP 8.2 with the following modules enabled:
    • curl
    • gd
    • imagick
    • intl
    • openssl
    • sqlite3
    • zip

Docker

  • Docker

Installation

Baremetal

  1. Download or clone this repo and move the files into your web root - usually /var/www/html
  2. Rename /db/wallos.empty.db to /db/wallos.db
  3. Run http://domain.example/endpoints/db/migrate.php on your browser
  4. Add the following scripts to your cronjobs with crontab -e
0 1 * * * php /var/www/html/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1
0 2 * * * php /var/www/html/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1
0 9 * * * php /var/www/html/endpoints/cronjobs/sendnotifications.php >> /var/log/cron/sendnotifications.log 2>&1
  1. If your web root is not /var/www/html/ adjust the cronjobs above accordingly.

Updating

  1. Re-download the repo and move the files into the correct folder or do git pull (if you used git clone before)
  2. Check the Prerequisites and install / enable the missing ones, if any.
  3. Run http://domain.example/endpoints/db/migrate.php

Docker

docker run -d --name wallos -v /path/to/config/wallos/db:/var/www/html/db \
-v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \
-e TZ=Europe/Berlin -p 8282:80 --restart unless-stopped \
bellamy/wallos:latest

Docker Compose

version: '3.0'

services:
  wallos:
    container_name: wallos
    image: bellamy/wallos:latest
    ports:
      - "8282:80/tcp"
    environment:
      TZ: 'America/Toronto'
    # Volumes store your data between container upgrades
    volumes:
      - './db:/var/www/html/db'
      - './logos:/var/www/html/images/uploads/logos'
    restart: unless-stopped

Usage

Just open the browser and open ip:port of the machine running wallos.
On the first time you run wallos a user account must be created.
Go to settings and personalise your Avatar and add members of your household. While there add / remove any categories and currencies.
Get a free API Key from Fixer and add it in the settings.
If you want to trigger an Update of the exchange rates, change your main currency after adding the API Key, and then change it back to your prefered one.

Screenshots

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot Screenshot

Contributing

Feel free to open Pull requests with bug fixes and features. I'll do my best to keep an eye on those.
Feel free to open issues with bug reports or feature requests. Bug fixes will take priority.
I welcome contributions from the community and look forward to working with you to improve this project.

Contributors

Translations

If you want to contribute with a translation of wallos:

  • Add your language code to includes/i18n/languages.php in the format "en" => "English". Please use the original language name and not the english translation.
  • Create a copy of the file includes/i18n/en.php and rename it to the language code you used above. Example: pt.php for "pt" => "Português".
  • Translate all the values on the language file to the new language. (Incomplete translations will not be accepted).
  • Create a copy of the file scripts/i18n/en.js and rename it to the language code you used above. Example: pt.js for "pt" => "Português".
  • Translate all the values on the language file to the new language. (Incomplete translations will not be accepted).

License

This project is licensed under the GNU General Public License, Version 3 - see the LICENSE.md file for details.

Why GPLv3?

I chose the GNU General Public License version 3 (GPLv3) for this project because it ensures that the software remains open source and freely available to the community. GPLv3 mandates that any derivative works or modifications must also be released under the same license, promoting the principles of software freedom.

I strongly believe in the importance of open source software and the collaborative nature of development, and I invite contributors to help improve this project.

Links

wallos's People

Contributors

1-vl avatar anotiawang avatar d0t1x avatar danteb918 avatar davialexandre avatar davinci13 avatar devzwf avatar ellite avatar github-actions[bot] avatar jadeiin avatar joek-bs avatar lslschr avatar mdzidic avatar noevidenz avatar peterdavehello avatar quietblade avatar raymenstereo avatar roguedbear avatar rutopio avatar sjafferali avatar snyssen avatar sokratis1988 avatar timtumturutumtum avatar tkymmm avatar ttam avatar xlinkout avatar zls0424 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wallos's Issues

Cannot send email / Test

Tried to setup the email settings but when I press the test button it causes Wallos to freeze up (504 gateway error) and then it does nothing (sometimes I get the "Error sending notification" pop-up"). I confirmed my SMTP settings are correct.

Error When Adding

Sorry, me again. I can't seem to add a new subscription I get:

image

Using Firefox

docker-compose

services:
    wallos:
        image: 'bellamy/wallos:latest'
        restart: unless-stopped
        ports:
            - '9050:80'
        environment:
            - TZ=America/Chicago
        volumes:
            - '/appdata/wallos/logos:/var/www/html/images/uploads/logos'
            - '/appdata/wallos/db:/var/www/html/db'
        container_name: wallos
        network_mode: bridge

Nothing is showing in logs

Are multiple logins supported?

Hello! I know the main install page suggests adding family members but from what I can see, anyone registered after the initial user just gets a name. I am not seeing any place to set a password for them, so they can sign in separately.

Assuming I'm right about that, consider this my request to enable logins for more users. I'd like to be able to share this with my SO and have her see her name on the screen, when she logs in.

Thanks for the great little app.

More 1 year

Hi,

i have multiple services when i pay for mutiple years directly, like my vpn (i pay for 3 years each time), an option for that would be verry cool :)

Thanks.

[FEATURE REQUEST] More information (category, paying user) in main screen

Hello,

I really like the app so far 👌

As an extension, I would find it useful to be able to differentiate between the categories or the persons paying for something directly on the main screen. For example, you could give the option to show or hide these columns or let me select background colors per user or per category or something like that.
Alternatively, you could make each element collapsible to show everything that is not normally shown. Going into edit mode to see categories, who is paying for something or notes is kind of impractical in my opinion.

Keep on the good work!

[FEATURE REQUEST] Usage rating for subscriptions

A useful feature would be the possibility to rate a subscription depending on usage or usefulness.
Maybe I am the only one who has subscriptions that, I thought, are needed, but rarely be used.

Such a feature (optional of course) could be extended to a form which could be filled ones a month/period to rate selected subscriptions for the users' utilization of the subscription. This could be used for an algorithm to suggest subscriptions which could be canceled or downgraded.

unable to edit existing subscription

mounted via portainer, docker-compose

version: '3.3'
services:
  wallos:
    container_name: wallos
    volumes:
      - wallos-db:/var/www/html/db
      - wallos-logos:/var/www/html/images/uploads/logos
    environment:
      - TZ=Europe/Berlin
    ports:
      - 8282:80
    restart: unless-stopped
    image: 'bellamy/wallos:latest'
volumes:
  wallos-db:
    driver: local
  wallos-logos:
    driver: local

registration of first user works
login/logout works
adding subscriptions is working
can't edit subscriptions tho.

"Error
Failed to load subscription"

the get.php call returns a 200 with a valid json, example

{
    "id": 2,
    "name": "Spotify",
    "logo": null,
    "price": 14.99,
    "currency_id": 1,
    "next_payment": "2023-11-20",
    "frequency": 1,
    "cycle": 3,
    "notes": "",
    "payment_method_id": 1,
    "payer_user_id": 1,
    "category_id": 3,
    "notify": 0
}

but thats it.

Header authentication

Great app. I have all my services behind a reverse proxy that handles authentication, and I want to use it to bypass the login screen and prevent having to login twice.

Are there any other methods of passing authentication information available now (such as headers)? If not, it is possible to use basic authentication, or disable authentication completely at the moment?

USD to AUD currency conversion backwards

I was unable to change my main currency in the settings ( #15 ), so instead I tried running docker exec wallos php /var/www/html/endpoints/cronjobs/updateexchange.php to update the exchange rate, since my currency should have been set when I signed up anyway.

The exchange rates are updated and the changed values are shown on the subscription page, however they are wrong (actually they are backwards).

For example, My main currency is AUD, I have a subscription of $5USD. I would expect a converted result to be $7.86AUD. Instead, I get $3.18AUD (which would be $5AUD to $USD)

Productivity listed twice

Hey, I noticed "Productivity" is listed twice in the category drop down.

Wallos/db/commands.sql

Lines 97 to 113 in eee998c

INSERT INTO categories (id, name) VALUES
(1, 'No category'),
(2, 'Entertainment'),
(3, 'Music'),
(4, 'Utilities'),
(5, 'Food & Beverages'),
(6, 'Health & Wellbeing'),
(7, 'Productivity'),
(8, 'Banking'),
(9, 'Transport'),
(10, 'Education'),
(11, 'Insurance'),
(12, 'Gaming'),
(13, 'News & Magazines'),
(14, 'Productivity'),
(15, 'Technology'),
(16, 'Charity & Donations:');

Thanks for the super cool app!

[FEATURE REQUEST] Split docker release in latest and dev tag, use github release feature

I would recommend, that the latest tag docker for the image is only update with a new release.

This means:

  • Use github release function to create a new release and add a changelog (and maybe breaking chances). Similar to how immich or paperless ngx does it (e.g. https://github.com/immich-app/immich/releases/tag/v1.86.0)
  • Only update the latest tag, when a new github release is created
  • Create a new docker tag called dev (or similar) which is updated on every commit

This would allow people to use the docker default latest tag and only update on new releases and not on new commit.

All of this is nice to have, but would be nice :)

BTW love this little tool, very helpful ❤️

Stats calculations incorrect

I have my main currency set to US Dollars, and removed all other currencies from the settings page. After doing this, I created a new yearly subscription for $695. After doing this, I click to the stats section and it appears the stats are way off. Screenshots attached.

Screenshot 2023-11-11 at 2 33 07 PM Screenshot 2023-11-11 at 2 33 16 PM

Renaming a category does not appear to work

I attempted to rename a Category and it does not appear to save this change. I've tabbed out of the field and clicked to save changes in other sections. The renamed category is reverted when adding a new subscription or going back into settings.

Docker Issue creating database

Hey, running exact docker command (but with actual paths) results in the following error message:

[10-Nov-2023 13:46:28] NOTICE: fpm is running, pid 7
[10-Nov-2023 13:46:28] NOTICE: ready to handle connections
Database does not exist. Creating it...
sh: syntax error: unexpected "("

Fatal error: Uncaught TypeError: Unsupported operand types: SQLite3 - string in /var/www/html/endpoints/cronjobs/createdatabase.php:98
Stack trace:
#0 {main}
  thrown in /var/www/html/endpoints/cronjobs/createdatabase.php on line 98

I get the registration page but the "Main Currency" drop down is empty and when registering I get these errors:

Warning: Undefined array key "main_currency" in /var/www/html/registration.php on line 30

Warning: SQLite3Stmt::execute(): Unable to execute statement: attempt to write a readonly database in /var/www/html/registration.php on line 44

Add more date options

Thank you for this great project! I have a request, I pay for some services every 2 years (Protonmail), is it possible to have more choices? Thank you

[FEATURE REQUEST] Add one-time payments

It would be great if you could also record “normal payments” with it.
So no billing cycle. Just the one-time payment in the supermarket, for example.
To make a distinction, you could also place an additional button on the dashboard:

Snag_624387fa
Snag_62444f23

aarch64 support

Would it be possible to get an image built for arm systems?

How to add other users?

Adding household members implies they could also be users this does not seem to be the case?
It would in a sense also open the door for gift subscriptions, i.e. subscriptions for 1 person paid for by another

[FEATURE REQUEST] Filter on Main and Stats page

A filter function beside the Sort function would be great.
To filter the fields within the subscriptions on the main page and the stats page.
Furthermore, the option to save a filter to a view.

On the stats page, the filter could update the “General Statistics” depending on the filter or saved view.
It would be good if the "General Statistics" updates depending on which category is crossed out /deselected on the split view.

Maybe saved views or favorite saved views could be displayed as a button to quick filter.

[FEATURE REQUEST] Calendar

I propose as a feature the possibility of seeing renewals on a calendar and potentially supporting export to Google Calendar or similar calendars

[Possible Bug] Subscription logo will be replaced/updated after editing

Version 1.0
Plattform: Docker
OS: Unraid
Used Browser: Chrome Version 119.0.6045.124

Foremost, THANK YOU for this wonderful project and your efforts.

If I edit an existing subscription, after I added a new one, the logo will be replaced with the one from the subscription I added before.
I used the web search to and both logos. This also happens if I edit a logo in a subscription and edit another one, it always replaces the logo with the last set one.
Furthermore, I am able to reproduce this behavior every time. It is not happening after a page refresh.

Warnung on Stats page when using weekly Billing Cycle

When I add a subscription with a weekly Billing Cycle and access the Stats page, I get the following warnings:
Warning: Undefined property: DateInterval::$weeks in /var/www/html/stats.php on line 101
Warning: Undefined property: DateInterval::$weeks in /var/www/html/stats.php on line 102

Without a weekly Billing Cycle, the warnings are not shown.
Otherwise, everything seems to work.

image doesnt display for subscription

image doesnt display for subscription

you add and save image....then when go back to home page only generic image (wallos)
but its in the image directory

Option paid by multiple people

Hi,

for multiple services (VPN, Spotify) we are multiple personnes for pay the subscription, that would be verry great to have an option for select multiple personnes in "Paid by"

Thanks.
image

[FEATURE REQUEST] Multiple notifications

The ability to add more than one "scheduled" notification.
For example, a notification 1 day before and one 7 days before the expiry.

I'd say let us customize the time of the notifications.

Can be tied to my other issue #27

Can't select currency when creating an account

I have setup Wallos with docker compose. When i open the website and want to create an account i can't select a currency from the Combobox, it is just empty.

Firefox is my main browser, but i have also tried it with a clean Chrome install and there i have the same problem.

[FEATURE REQUEST] - Free trial tracking

Would be useful to be able to track free trials including special email reminders when trials are running out and an ability to convert free trials to regular subscriptions

Registration fail

Environment: Fedora 39

I was trying to install Wallos on baremetal, but the initial registration fails.

  1. Dependencies installed:
dnf install nginx \
        php \
        php-curl \
        php-gd \
        php-imagick \
        php-openssl \
        php-pdo
  1. Cloned this repository to /var/www/html/ and adjusted the crontab to /var/www/html/Wallos/endpoints/cronjobs/.
  2. Set the default Nginx root to /var/www/html/Wallos/ and restarted it.

The registration page opens, but whatever value I entre in the form fails.
image

Can you help me with this?

Email notifications not working.

I'm running into a little hiccup while testing email notifications, and it seems like the snag might be due to using the sender's email address as the username.

Fatal error: Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: data not accepted. in /var/www/html/libs/PHPMailer/PHPMailer.php:2055 Stack trace: #0 /var/www/html/libs/PHPMailer/PHPMailer.php(1682): PHPMailer\PHPMailer\PHPMailer->smtpSend('Date: Fri, 10 N...', 'This is a test ...') #1 /var/www/html/libs/PHPMailer/PHPMailer.php(1516): PHPMailer\PHPMailer\PHPMailer->postSend() #2 /var/www/html/endpoints/notifications/sendtestmail.php(56): PHPMailer\PHPMailer\PHPMailer->send() #3 {main} thrown in /var/www/html/libs/PHPMailer/PHPMailer.php on line 2055

https://ibb.co/vcwprGR

Payload

{"smtpaddress":"smtp.sendgrid.net","smtpport":"587","smtpusername":"apikey","smtppassword":"SecurePassword"}

Billing Cycle

Hi! Wonderful app. I'm wondering what's the "Billing Cycle". I have a subscription that I have to pay every 3 years. There is an option for this? Maybe it is a "Feature Request".

Changing the username does not update the household table

Steps to reproduce

  1. Change the current username through the User > Settings dialog
  2. Open a subscription and check the Paid by field

Expected behaviour

The Paid by field value reflects the new username.

Actual behaviour

The Paid by field still uses the old username.

Workaround

Manually update the household table using sqlite3 and a query like this:

UPDATE household SET name = 'New Username' WHERE id = 1;

PS: Thanks for this handy little tool! I really like it, seems to be just the right thing for folks not looking for a full blown budgeting solution.

[FEATURE REQUEST] Adding Type || Bucket || Area to subscriptions

A Possibility to assign a Type, Bucket, or Area (I'm lacking the proper name) besides the categories to cluster the types of expenses.
For example, so a user can create a bucket for:

  • online subscriptions (Netflix, Prime, M365, Google One, etc..)
  • basic subscriptions (Internet Provider, Mobile Phone, car insurance etc..)
  • budgetary subscriptions/contracts (rent, car leasing, power, etc..)
    or other areas they like to.

The main reason, of course, would be to get better stats on the individual buckets. Because the amount per month greatly differs, so the stats combining all subscriptions is pretty useless. Filters for this would be needed -> #56

And I know the direction of Wallos is for subs only, but one could argue rent and so on is just a bigger type of sub :)

OIDC support

Hello,
I really like the project and wanted to ask if you could add open id connect support for login, so that I can use my SSO provider that I use for all my self hosted apps.

thanks and best wishes,
Timo

Issue getting the container to start

My docker-compose:

---
version: "3.7"
service:
  wallos:
    image: bellamy/wallos:latest
    container_name: wallos
    depends_on:
      - traefik
    #expose: 
    #  - 8282
    ports:
      - 8282:8282
    networks:
      - service
    volumes:
      - /opt/docker/container/wallos/db:/var/www/html/db
      - /opt/docker/container/wallos/logos:/var/www/html/images/uploads/logos
    environment:
      TZ: ${TZ}
    labels:
      # Watchtower:
      com.centurylinklabs.watchtower.enable: true
      com.centurylinklabs.watchtower.scope: mainScope
      # Traefik:
      traefik.enable: true
      # Traefik rules for wallos:
      traefik.http.services.wallos.loadbalancer.server.port: 8282
      traefik.http.routers.wallos-local.entrypoints: 'http'
      traefik.http.routers.wallos-local.rule: 'Host(`wallos.${DOMAIN_INTERNAL}`)'
    restart: unless-stopped

I also used the example script in the readme

docker run -d --name wallos -v /opt/docker/container/wallos/db:/var/www/html/db \
-v /opt/docker/container/wallos/logos:/var/www/html/images/uploads/logos \
-e TZ=Europe/Berlin -p 8282:9999 --restart unless-stopped \ 
bellamy/wallos:latest

Output from the logs:

[12-Nov-2023 14:53:34] NOTICE: fpm is running, pid 6
[12-Nov-2023 14:53:34] NOTICE: ready to handle connections
Database already exist. Checking for upgrades...
Table 'notifications' already exists.
Column 'notify' already exists in table 'subscriptions'.

I tried the following:

  • Remove container and restart the compose -> Not working
  • Remove container, pull image, restart compose -> Not working
  • Double checked my compose -> All looked fine
  • Tried the example script in the readme -> Not working
  • Tried changing the host ports -> Not working

When trying to reach the container:
grafik

Additional pictures:
grafik
grafik

Any idea where I could l start looking? All other containers usually work fine

Streamline Currency

This is a great start - thank you!

I selected USD as my default currency. However, when I create a new subscription, it defaults to EUR. I would expect it to default to USD.

Perhaps it would also be helpful if the currency order could be manually sorted.

Error when changing currency in Settings

When attempting to change currency to update the exchange rates I get an unknown error, and the save button stays grey. On refreshing the page, it looks like it has changed, but the currencies stay exactly the same on the main subscriptions page.

The Response for save_user.php gives this:

Warning: Undefined array key "rates" in /var/www/html/endpoints/user/save_user.php on line 34

Warning: Trying to access array offset on value of type null in /var/www/html/endpoints/user/save_user.php on line 34
{"success":true}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.