{"id":19366795,"url":"https://github.com/rsoury/freelancer-hours","last_synced_at":"2026-05-17T02:12:53.820Z","repository":{"id":144018462,"uuid":"209775667","full_name":"rsoury/freelancer-hours","owner":"rsoury","description":"Freelancer Hours is continuous collaboration between you and your clients made easy. No more back and forth proposals and negotations. ","archived":false,"fork":false,"pushed_at":"2021-01-05T14:36:33.000Z","size":782,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-17T19:51:07.981Z","etag":null,"topics":["airtable","collaboration","freelancer","hours-tracker","productivity","react","serverless","serverless-framework"],"latest_commit_sha":null,"homepage":"https://hours.webdoodle.com.au/buyte/","language":"JavaScript","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/rsoury.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-09-20T11:32:55.000Z","updated_at":"2021-11-01T08:06:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"9b695d61-06f3-4164-801e-36361563a5c3","html_url":"https://github.com/rsoury/freelancer-hours","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rsoury/freelancer-hours","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsoury%2Ffreelancer-hours","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsoury%2Ffreelancer-hours/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsoury%2Ffreelancer-hours/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsoury%2Ffreelancer-hours/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rsoury","download_url":"https://codeload.github.com/rsoury/freelancer-hours/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsoury%2Ffreelancer-hours/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33125184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"online","status_checked_at":"2026-05-17T02:00:05.366Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["airtable","collaboration","freelancer","hours-tracker","productivity","react","serverless","serverless-framework"],"created_at":"2024-11-10T07:46:34.529Z","updated_at":"2026-05-17T02:12:53.806Z","avatar_url":"https://github.com/rsoury.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Freelancer Hours\n\nFreelancer Hours is continuous collaboration between you and your clients made easy. No more back and forth proposals and negotations. \n\n## How it works\n\n1. Use Airtable to create a new client and set your variable/flat rate using JSON (for now)\n2. Send over your link with a time recommendation based on the required tasks.\n3. Your client requests a top up for the price/time they desire\n4. Invoice for the given time\n5. Once invoice is paid, get to work and be sure to track your time\n6. And... repeat to keep work consistent until the project or the series of tasks is complete.\n7. If client requests a timesheet, generate your timesheet for the requested period and email it through.\n\n## Why?\n\nThis web tool lets your clients:\n- Track their remaining time with you\n- Request a top up of time\n- Request a timesheet\n\nBenfits for you:\n- Work only when your clients have purchased your time\n- Variable rates depending on how long you're secured for\n- Don't get underpaid for any given piece of work\n- Minimise proposals and negotiation\n\nBenefits for your clients:\n- Pay as you go model for freelancing\n- Don't waste time on proposal reviews\n- Maximise time spent on actual business tasks\n\n## Demo\n\nYou can find a demo here: https://hours.webdoodle.com.au/buyte/\n\n## Getting Started\n\nUse `.env.example` to create a `.env` file.\nHere you can configure your Airtable Settings and provider your public functions/backend URL.\n\nYou can find an example Airtable base here: https://airtable.com/shr1N9EQKedRgVSGn\n\nThe stack includes: \n- Frontend: React\n- Backend: Serverless Node.js (AWS)\n\n### Local Development\n\nFrontend: `yarn start`\nBackend: `yarn start:lambda`\n\n### Deployment\n\nFor frontend assets we recommend using Netlify as it's a free service, it's highly available, and it leverages GitOps which makes life easy peasy.\n\nFor backend: `sls deploy --stage prod` \n\n... be sure to have Serverless installed\n```\nnpm i -g serverless\n```\nor\n```\nyarn global add serverless\n```\n\n# Caveats\n\n- Airtable Configuration\n  - When setting a client's Link, be sure the pathname is the kebab cased version of the name. This includes whitespace. \n  Name: Hello World \n  Link: https://yourdomain.com/hello-world \n  - When setting your Hours Rates, we recommend using https://jsoneditoronline.org and then pasting back into the cell.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsoury%2Ffreelancer-hours","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frsoury%2Ffreelancer-hours","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsoury%2Ffreelancer-hours/lists"}