Giter Site home page Giter Site logo

jakubgarfield / expenses Goto Github PK

View Code? Open in Web Editor NEW
1.2K 34.0 170.0 7.08 MB

💰Expense tracker using Google Sheets 📉 as a storage written in React

Home Page: https://demo-expenses.chodounsky.net/

License: MIT License

HTML 3.70% JavaScript 88.73% CSS 5.99% Shell 1.57%
progressive-web-app expenses expense-tracker expense-manager react react-components service-worker reactjs google-sheets google-api

expenses's Introduction

💰Expenses is a progressive web application on top of Google Sheets 📉 written in React ⚛️. It is only a static HTML that works great on mobile 📱 and can be deployed anywhere.

Check out the demo but please be considerate and don't break it for others.

Delete expense

It was inspired by the expense-manager by mitul45 and it uses the material web components and material icons.

Features

  • Multiple accounts
    • Checking, savings, joint, etc.
  • Categories
  • Google Sheet as a backend
    • Great privacy and access control.
    • Don't share sensitive data with 3rd party.
    • Unlimited analysis up to your sheet skill.
  • Works great on mobile
    • Progressive Web App. Loads quickly and works as a standalone app.
  • Beautiful material design
    • Better than native ;)
  • Recurring expenses
  • Monthly summary
    • This month. Last month. You immediately know how you doing.

Get started

You will need a somewhat recent version of Node and a place to deploy static HTML under a custom domain (doesn't have to be top level). To get the full offline support with service workers you'll need HTTPS – CloudFlare works fine or you can use your own certificate.

  1. make a copy of Expense Sheet to your drive File -> Make a copy...
  2. note the id of your new sheet (it's part of the URL)
  3. clone, install dependencies and build the app:
npm i && REACT_APP_SHEET_ID=<replace with your sheet id> npm run build
  1. copy the content of build folder to your server

Recurring Expenses

Zapier is a service for connecting apps and automating your workflows. And it can be used to add recurring expenses with the Google Sheets Integrations.

Select a trigger – it could be every month, week, or based on anything else.

Use the Create Spreadsheet Row integration and select your expense sheet and fill it with the desired values. Easy.

Zapier setup for recurring expenses

Sharing

Adding another person (for example your partner) to the app is easy – you just give them access to the expense sheet in Google Sheets.

After that, they have the same access as you are and can add expenses through the same URL.


If you like this project – you might also enjoy React Digest newsletter 🗞. Subscribe to get the top 5 news from React community every week.

expenses's People

Contributors

caroso1222 avatar jakubgarfield avatar maximrouiller avatar vritant24 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  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

expenses's Issues

Client Id Issue

Client id only works on localhost:8080

It won't work in localhost default static port 5000 or any other domain. Please provide steps to create new client id. I guess I need to submit for verification to access sheets api

getting error

cb=gapi.loaded_0:82 Uncaught Object
{
  error: "idpiframe_initialization_failed",
  details: "Failed to read the 'localStorage' property from 'Window': Access is denied for this document."
}
(anonymous) @ cb=gapi.loaded_0:82

what can be wrong?

Stuck with loading page

  1. created a copy of google sheet (different name)
  2. ran the following command
npm i && REACT_APP_SHEET_ID=<replace with your sheet id> npm run build
  1. copied the build contents to my nginx path (under html/*)
  2. End up with LOADING page
    Image

Inquiry Regarding Deprecated Google Authentication Library

Hi @jakubgarfield,

I came across your public GitHub repository, and I noticed that the code, last updated five or six years ago, is currently encountering an error related to the use of deprecated Google Sign-In JavaScript libraries.

You have created a new client application that uses libraries for user authentication or authorization that are deprecated. New clients must use the new libraries instead. See the Migration Guide for more information.

The console output suggests migrating to newer authentication and authorization methods, as outlined in the Migration Guide. Given the recent changes by Google, the existing code may not be functioning as expected.

I'm reaching out to inquire if you have any plans to address this deprecation and update the authentication libraries in your project.

Stuck on OAuth screen when logging in from the PWA

When I log in through the PWA app the app opens the OAuth login screen in a new app window. I select my account and see a loading indicator but it never returns to the PWA. It just keeps loading forever. When I log in through the browser it works perfectly fine.

I quickly looked into this but couldn't find a fix.
I'm serving this over HTTPS with AWS CloudFront / S3

Get unable to parse range Current!H1 error

Hi,

When I setup this web application and run it, I get unable to parse the range Current!H1 error. I add two tabs "Current" and "Previous" to fix this issue. Not sure this is really an issue or something I setup wrong. Please take a look at it.

Thanks

Google API setup

Can you add the "getting started" steps to create the required Google API/Client ID with the correct scopes?

Domain Name has Expired

I just discovered that the domain name (demo-expenses.net) has expired and has not been renewed.

Add evidences to expense/income

Are you intending to add this feature where we can upload image or take picture of certain phisical documents such as expenses, payroll etc.?

Sign-in error

[Error] Failed to load resource: the server responded with a status of 400 (HTTP/2.0 400) (values:batchGet, line 0)
[Error] [object Object]
	(anonymous function) (cb=gapi.loaded_0:75)

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.