Skip to content

Commit

Permalink
Merge pull request #7 from jbelelieu/develop
Browse files Browse the repository at this point in the history
v0.3.1-beta
  • Loading branch information
jbelelieu authored May 5, 2022
2 parents cfbcd45 + 7cf2f87 commit 64f7cb8
Show file tree
Hide file tree
Showing 39 changed files with 970 additions and 189 deletions.
71 changes: 47 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@


![ATOS Logo](assets/atos_logo.png)
![ATOS Logo](assets/screens/atos_logo.png)

**Built by freelancer 🙋‍♂️, for freelancers 🕺 🤷 💃🏾 .**

Expand All @@ -10,24 +8,29 @@ Whether you're selling time-based sprints, or simply tracking time worked, ATOS

💬   [Tweet About ATOS](http://twitter.com/intent/tweet?text=Freelancers!+Check+out+ATOS+%2C+a+drop+dead+simple%2C+locally+hosted+story+tracker+and+invoice+generator+designed+for+freelancer+software+developers.&url=https%3A%2F%2Fgit.luolix.top%2Fjbelelieu%2Fato_stories)   ☕️   [Buy me a Coffee!](https://www.buymeacoffee.com/jbelelieu)

ATOS is a locally hosted, zero-setup application that makes invoicing against backlogs drop-dead simple. It does:
**Key Features**

- **Client Management**: Manage all of your clients, as well as companies that you represent.
- **Project Management**: Track stories against known backlogs (or use it as an independent PM tool).
- **Invoice Generation**: Generate detailed invoices against those completed stories.
- **Taxes**: Estimate your tax burden for the year using customizable tax files for various regions, whether it be at the national (federal), regional (state), or municipal levels (city).
- **Estimated Taxes**: Estimate your tax burden for the year using customizable tax files for various regions, whether it be at the national (federal), regional (state), or municipal levels (city).

**Open Source and Free!**

ATOS is 100% open source and free to use, licensed under the [GNU AGPLv3 License](https://www.gnu.org/licenses/agpl-3.0.en.html).

**Screen Shots**

<img alt="ATOS Screen Shot" src="https://github.com/jbelelieu/atos/blob/develop/assets/screens/atos-screen-project-sm.png?raw=true" style="width: 250px;float:left;" /> <img alt="ATOS Invoice Screen Shot" src="https://github.com/jbelelieu/atos/blob/develop/assets/screens/atos-screen-invoice-sm.png?raw=true" style="width: 250px;float:left;" /> <img alt="ATOS Invoice Screen Shot" src="https://github.com/jbelelieu/atos/blob/develop/assets/screens/atos-screen-taxes-sm.png?raw=true" style="width: 250px;float:left;" />

-----

- [Setup](#setup)
- [Download and Start](#download-and-start)
- [Update Your Default Settings (Optional Step)](#update-your-default-settings-optional-step)
- [Notice: Deploying ATOS To The Web**](#notice-deploying-atos-to-the-web)
- [Notice: Deploying ATOS To The Web](#notice-deploying-atos-to-the-web)
- [Notice: Updating Your Logo](#notice-updating-your-logo)
- [Notice: Saving Invoices and Tax Overviews](#notice-saving-invoices-and-tax-overviews)
- [Notice: Saving Invoices, Reports, and Tax Documents](#notice-saving-invoices-reports-and-tax-documents)
- [Notice: Language Files](#notice-language-files)
- [Notice: Templates Files](#notice-templates-files)
- [Notice: PHP 8.1 Requirement](#notice-php-81-requirement)
Expand All @@ -39,7 +42,11 @@ ATOS is 100% open source and free to use, licensed under the [GNU AGPLv3 License
- [Is this meant to be a replacement for JIRA or Pivotal Tracker?](#is-this-meant-to-be-a-replacement-for-jira-or-pivotal-tracker)
- [What tasks get placed on invoices?](#what-tasks-get-placed-on-invoices)
- [Will future versions remain compatible with the beta?](#will-future-versions-remain-compatible-with-the-beta)
- [Will future versions require a local PHP Server?](#will-future-versions-require-a-local-php-server)
- [Can companies use this to management projects?](#can-companies-use-this-to-management-projects)
- [How long will beta last?](#how-long-will-beta-last)
- [Why isn't this using modern PHP tools like Composer?](#why-isnt-this-using-modern-php-tools-like-composer)
- [Are you commiting to maintaining and improving ATOS moving forward?](#are-you-commiting-to-maintaining-and-improving-atos-moving-forward)
- [How should I handle non-payment of a collection?](#how-should-i-handle-non-payment-of-a-collection)
- [How do I reconcile what I billed and what I got paid?](#how-do-i-reconcile-what-i-billed-and-what-i-got-paid)
- [What's the easiest way to import part data?](#whats-the-easiest-way-to-import-part-data)
Expand All @@ -61,23 +68,25 @@ ATOS requires `PHP 8.1+` and `SQLite3`.
- From Github, download the [latest release ZIP file](https://github.com/jbelelieu/atos/releases)
- Unzip it wherever you want on your local machine
- From the command line, go to the ATOS directory and launch the PHP server: `php -S localhost:9001`
- If you need to install PHP, please see "Notice: PHP 8.1 Requirement" below for instructions.
- You can test your machine's version of PHP using `php -v`
- You can now access ATOS from any web browser at `http://localhost:9001`.

#### Update Your Default Settings (Optional Step)

Open `settings.sample.php` and update the values as needed. Optionally rename it to `settings.env.php`, otherwise ATOS will do that for you.

#### Notice: Deploying ATOS To The Web**
#### Notice: Deploying ATOS To The Web

ATOS was always meant to be used locally. While there shouldn't be any problems deploying it, I don't recommend allowing anyone to access it who you don't trust. There is no concept of "users" in the platform, so anyone with access to the platform will be able to do whatever they want with your data.

#### Notice: Updating Your Logo

You can add your logo to outgoing invoices by simply replacing `assets/logo.png` in the main directory of the project with your actual logo.

#### Notice: Saving Invoices and Tax Overviews
#### Notice: Saving Invoices, Reports, and Tax Documents

If you plan on generating and saving invoices/taxes locally (which I recommend you do), you will need to make sure the `_generated` directory is writable: `chmod 0755 _generated`.
If you plan on generating and saving generated documents locally (which I recommend you do), you will need to make sure the `_generated` and `_vault` directories are writable: `chmod 0755 _generated && chmod 0755 _vault`.

Invoices/ and taxes files are saved as HTML. Most computers have reasonable `Print as PDF` options now; please use that feature to print a PDF if required. ATOS hard codes styles, so changing `assets/invoiceStyle.css` or `assets/taxStyle.css` won't affect already saved invoices.

Expand Down Expand Up @@ -162,11 +171,31 @@ Note that you can have stories with a "complete" status that won't appear in the

100%, without question. I use this personally, and I can't lose years of data for an upgrade. Your data won't become obsolete and you won't need to re-import anything with future versions.

### Will future versions require a local PHP Server?

While you can certainly continue to use this with a local PHP server, once beta is completed, the plan is to turn this into either a desktop app or a containerized app.

### Can companies use this to management projects?

As of now there isn't a concept of "users", so while in theory it could be used, there wouldn't be any way of limiting who can do what in the application, nor any way of knowning who did what.

Should beta find success, I will be happy to implement more extensive user-based permissions/roles allowing for companies to leverage this more effectively. But again, this was always designed for freelancers, so that was never a consideration going into beta.

### How long will beta last?

Depending on how much feedback I get, I'm hoping to release v1 of ATOS mid-summer. Should the project find good feedback and success, I'll commit to extensive code clean up in line with some of my other modern projects like Zenbership v2.

### Why isn't this using modern PHP tools like Composer?

The goal was always a zero-dependency application that can be setup in seconds. Sqlite3 allows for easy bsckups and makes your data highly portable. By adding complexity in the form of package managers and the such, it adds extra steps I don't want to put people through.
The goal was always a zero-dependency application that can be setup in seconds. While I could ship with a vendor folder, I want this to be without bloat whenever possible. Sqlite3 allows for easy backups and makes your data highly portable. The lack of a full fledged PHP framekwork makes the package smaller. By adding complexity in the form of package managers and the such, it adds extra steps I don't want to put people through.

In thoery, assuming you have PHP 8.1 installed locally, all you have to do is unzip the latest release and start the PHP server.

### Are you commiting to maintaining and improving ATOS moving forward?

Should ATOS gain a dedicated user-base and receive good feedback during beta, I fully intend to continue working on it. Future work would include a post-beta modernization of the codebase, as well as potential online "cloud-based" versions of the application. But I'll never remove the open source aspect of the application, and it will always be free to use locally.

In thoery, assuming you have PHP 8.1 installed locally, all you have to do is unzip the latest release and start the PHP server. I intend to keep it that way: *simplicity is poetry in code!*
I personally use this application for all of my freelancing needs, so one way or another development will continue on it.

### How should I handle non-payment of a collection?

Expand All @@ -176,7 +205,7 @@ If a client doesn't end up paying, you should set the the task to the `Unpaid` s

If a client only paid a fraction of an invoice, you have some options:

- Change the task's hours: you can alter the collection, changing the hours billed to `0`,
- Change the task's units: you can alter the collection, changing the units billed to `0`,
- Change your tax burdens: if your goal is more accurate tax reporting, you can add a deduction at for the difference between what you billed and what you were paid. For example, if you were owed were `$10,000` and only got paid `$6,000`, within your tax information for that year, a `$4,000` deduction effectively fixes your actual income since deductions come directly out of your billed amount for the year.

### What's the easiest way to import part data?
Expand Down Expand Up @@ -223,6 +252,7 @@ Some ways you can contribute include:
- Donate to support additional development
- Build features for the core platform
- Translate the application into a new language or dialect
- Build new report templates
- Create yearly tax files: create one for your regional burdens and share with the world!
- Theming
- Dashboard themes (no heavy javascript-based solutions)
Expand All @@ -236,16 +266,9 @@ Some ways you can contribute include:

# Roadmap

- Editing of companies, projects, rates, types, and statuses
- File and data syncing via a cloud service (dropbox, etc.)
- Remove PHP8 requirement in favor of most universally available versions
- Edit companies and project basics
- Task notes and files
- PRoject hand off lists
- Project turn-over to-do lists that can be generated and sent to clients much like invoices
- Basic estimated tax help for American freelancers
- Automate grabbing regions from github and auto creating
- Save generated tax burden page
- Select your tax strategies
- Reminders of est taxes being due
- Bulk actions on stories
- Expanded language support and language packs
- Various themes
- List invoice / tax directory contents
- Better help bubbles, especially for first time users
Empty file added _vault/.gitignore
Empty file.
43 changes: 40 additions & 3 deletions assets/alternatve_view.css
Original file line number Diff line number Diff line change
Expand Up @@ -442,11 +442,11 @@ hr {
}

.show {
visibility: visible;
display: block;
}

.hide {
visibility: hidden;
display: none;
}

header span:last-child {
Expand Down Expand Up @@ -671,19 +671,52 @@ h4 {
}

#logoArea img {
max-height: 80px;
max-height: 100px;
max-width: 150px;
width: auto;
height: auto;
}

button.a {
margin: 0;
color: #111;
padding: 0px;
border: none;
cursor: pointer;
background-color: transparent !important;
}

/* */

blockquote {
font-style: italic;
margin: 16px 0;
color: #333;
}

blockquote:before,
blockquote:after {
content: '"';
}

.noMarginTop {
margin-top: 0px;
}

.borderSection table tr th:first-child,
.sunk table tr th:first-child,
.borderSection table tr td:first-child,
.sunk table tr td:first-child {
padding-left: 0px;
}

.borderSection table tr th:last-child,
.sunk table tr th:last-child,
.borderSection table tr td:last-child,
.sunk table tr td:last-child {
padding-right: 0px;
}

/* */

.columns5050 {
Expand Down Expand Up @@ -829,6 +862,10 @@ table td.summary {
background-color: #dbf9ff;
}

.table_bump {
padding-top: 4px;
}

.attentionTop p:first-child {
margin-top: 0;
}
Expand Down
Binary file added assets/castlamp_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions assets/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,15 @@ function preventUnloadBasedOnFormChanges(formId) {
bindUnload();
});
}

/**
*
* @param {*} id
*/
function toggleDiv(id) {
if (document.getElementById(id).style.display === 'block') {
document.getElementById(id).style.display = 'none';
} else {
document.getElementById(id).style.display = 'block';
}
}
88 changes: 58 additions & 30 deletions assets/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ footer span {
}

footer {
margin-top: 0px;
margin-top: 24px;
padding: 9px;
text-align: right;
font-size: 80%;
Expand Down Expand Up @@ -687,9 +687,13 @@ h4.sectionHeader {
} */

.projectId {
/* border-radius: 12px; */
/* padding: 3px 12px; */
/* display: inline-block; */
font-weight: bold;
border-radius: 12px;
text-align: center;
color: #111;
display: inline-block;
padding: 2px 9px;
line-height: 30px !important;
font-weight: bold;
line-height: 30px;
}
Expand Down Expand Up @@ -914,9 +918,9 @@ button:hover:not(.createNew) {
}

.freeColumns {
grid-template-columns: auto auto auto auto auto auto;
grid-template-columns: auto auto auto auto auto auto auto auto;
display: inline-grid;
grid-column-gap: 24px;
grid-column-gap: 32px;
}

.projectTopColumns {
Expand Down Expand Up @@ -1086,28 +1090,9 @@ table td.summary {

/* */

.success {
color: #3fcce8;
}

.blue {
color: #3fcce8;
}

.error {
color: #E44B58;
}

.error,
.success {
line-height: 32px;
font-weight: bold;
font-size: 0.9em;
}

.iconHolder {
display: inline-block;
font-size: 18px;
font-size: 22px;
}

/* */
Expand All @@ -1124,15 +1109,39 @@ table td.summary {
text-decoration: underline;
}

.error,
.success,
.highlight {
background-color: #dbf9ff;
padding: 16px;
}

.highlight {
border-radius: 9px;
/* margin-bottom: 24px; */
/* border-bottom: 1px solid #3fcce8; */
}

.highlight h2:first-child {
.error {
background-color: #E44B58;
color: #fff;
}

.error,
.success {
font-weight: bold;
margin: 16px 0;
}

.error .iconHolder,
.success .iconHolder {
margin-right: 12px;
}

.highlight,
.success {
background-color: #dbf9ff;
}

.highlight h2:first-child,
.highlightFixed h2:first-child {
margin-top: 12px;
}

Expand All @@ -1142,6 +1151,25 @@ table td.summary {
border-radius: 0;
}

/* .success {
color: #3fcce8;
}
.blue {
color: #3fcce8;
}
.error {
color: #E44B58;
}
.error,
.success {
line-height: 32px;
font-weight: bold;
font-size: 0.9em;
} */

.attentionTop {
/* border-left: 3px solid #3fcce8;
border-right: 3px solid #3fcce8;
Expand Down
Loading

0 comments on commit 64f7cb8

Please sign in to comment.