-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 40aaefd
Showing
58 changed files
with
21,276 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.settings/ | ||
.settings/* | ||
.project |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
Oops, something went wrong.