Skip to content

Commit

Permalink
First full FOSS version
Browse files Browse the repository at this point in the history
  • Loading branch information
bertvandepoel committed Apr 17, 2019
0 parents commit 40aaefd
Show file tree
Hide file tree
Showing 58 changed files with 21,276 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.settings/
.settings/*
.project
5 changes: 5 additions & 0 deletions .htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
661 changes: 661 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Tabby - A friendly tool to manage debt

Tabby is a tool I made for myself due to lack of practical and unannoying tools to manage debt and remind people about it. Since existing solutions require accounts for people to even see how much you owe, or have other annoying requirements or missing features, I created Tabby with the idea that it would serve all of my needs and be as enjoyable for my debtors as possible (I was mostly just tired of reminding people to pay back their meals).

While initially developing Tabby as mostly a quick little script, I somehow managed to develop it in full. So since it works surprisingly well and has a bunch of features, I ended up FOSSing it. It's something I very much believe in ideologically, and I think it might be useful to others.

## Features

* An installation is a private instance owned by an admin
* The admin can approve or deny account registrations
* Accounts are only required to register debt, debtors don't require any form of account
* While an interface is available for debtors, they can also get all the information required to repay someone through email
* Track debt based on activities
* Track credit separate from whether a specific debt was repaid or not (so people with open credit are just fine)
* Reminds users to check their bank account and then ask Tabby to send reminders
* Probably GDPR-compliant, I guess?
* Adorable logo
* Probably more things, not too sure what to write here

## Requirements

* PHP 5.5.9 or up, works fine with PHP 7, might also work with even older versions
* MySQL (may also work with PostgreSQL)
* Cron
* Working mail setup on the webserver

## Installation

* Clone this repo to the right location or copy/transfer it there
* Edit config.php to reflect your situation
* Import db.sql into your empty database
* Manually add an entry to the users table for your admin account, the password should be a PHP password_hash. I should probably automate this somehow.

## License

This project is licensed under the AGPL license - see the [LICENSE](LICENSE) file for details

## Acknowledgements

Tabby uses the bubblegum bootstrap theme by hackerthemes.com, licensed under the MIT license. Bootstrap 4 includes Font Awesome, which contains files under the CC BY 4.0, SIL OFL and MIT License.
264 changes: 264 additions & 0 deletions bubblegum/app.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Bubblegum - Bootstrap Theme</title>

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">

<link rel="stylesheet" href="css/bootstrap4-bubblegum.4.3.1.min.css">


<link href="https://fonts.googleapis.com/css?family=Chicle|Open+Sans" rel="stylesheet">


</head>
<body>

<div class="bg-danger text-white navbar-dark">
<div class="container">
<nav class="navbar px-0 navbar-expand-lg navbar-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a href="index.html" class="pl-md-0 p-3 text-white">Start</a>
<a href="app.html" class="p-3 text-decoration-none text-white">App example</a>
<a href="form.html" class="p-3 text-decoration-none text-white">Form example</a>
</div>
</div>
</nav>

</div>
</div>



<div class="container py-5 mb5">
<h1 class="mb-5">Sample application</h1>

<div class="row">
<div class="col-md-3">
<form class="mb-3">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Search</button>
</div>
</div>
</form>

<div class="list-group">
<a href="#" class="list-group-item list-group-item-action active"> Dashboard </a>
<a href="#" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
Inbox
<span class="badge badge-primary badge-pill ml-auto">14</span>
</a>
<a href="#" class="list-group-item list-group-item-action">Orders</a>
<a href="#" class="list-group-item list-group-item-action">Products</a>
<a href="#" class="list-group-item list-group-item-action">Customers</a>
<a href="#" class="list-group-item list-group-item-action">Reports</a>
</div>
</div>
<div class="col-md-9">

<div class="row d-none">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Card title</h4>
<p class="card-text">
Some quick example text to build on the card title
and make up the bulk of the card's content.
</p>
<!--<a href="#!" class="btn btn-primary">Go somewhere</a>-->
</div>
</div>
</div>
</div>

<table class="table">
<thead class="thead-light">
<tr>
<th scope="col">#</th>
<th scope="col">Item</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>

<tr>
<th scope="row">1</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">2</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">3</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">4</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">5</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">6</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">7</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">8</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

<tr>
<th scope="row">9</th>
<td>
<a href="#">
Some item on your list
</a>
</td>
<td>
<a href="#" class="btn btn-sm btn-primary my-1 my-sm-0">
<span class="fas fa-edit mr-1"></span>
Edit</a>
<a href="#" class="btn btn-sm btn-danger my-1 my-sm-0">
<span class="fas fa-trash mr-1"></span>
Delete</a>
</td>
</tr>

</tbody>
</table>

</div>
</div>

</div>



<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

</body>
</html>
Loading

0 comments on commit 40aaefd

Please sign in to comment.