Crater Invoice 4.0.0 (Free & OpenSource Invoice App built with Laravel)

Hey guys!

We've just released a major update on Crater Invoice: [https://craterapp.com](https://craterapp.com/?fbclid=IwAR2c5RN365G5ckM89Wp0jJP9-CFZElo2DGNvQavdQXzD5NMSjINnO5_4r-g).

It's a free & open-source Self Hosted Invoice app built with Laravel, TailwindCSS & VueJS.
You can also use mobile apps that allow you to manage your business on the go!

Android: [https://play.google.com/store/apps/details...](https://play.google.com/store/apps/details?id=com.craterapp.app&hl=en_IN&gl=US&fbclid=IwAR0CbGjvkPEFPvD1y9EpBHi6ULHQkyTvh29N8iEf94RBWxvcUO02OXe0IzE)
IOS: [https://apps.apple.com/us/app/crater-invoice/id1489169767](https://apps.apple.com/us/app/crater-invoice/id1489169767?fbclid=IwAR1arkGZrDIn4l3nYo69KwzbN6UnJzxYip2JyEzmrRLdMNJmiTlyUfmCv3I)

New changes:

* Replaced Bootstrap CSS framework with Tailwind CSS
* Upgraded to Laravel 8
* Added ability to create & download file & DB Backups
* Added File-Disk Configuration Settings ( Saves PDFs or Backups to Digital Ocean Spaces, AWS S3 & Dropbox)
* Added new Customer View page
* Added Custom Notes for Estimates, Payments & Invoices
* Added Unit & Feature Tests
* Revamped API + API Documentation
* Added ability to Edit Email Subject & Description with placeholders before sending out an Invoice or Estimate Email
* Added Custom Fields - Customize your Address formats on PDFs ( use custom or basic fields according to your preference)
* Added Global Search
* Added ability to Manage Admins (Add, Edit, and remove Admins)

14 thoughts on “Crater Invoice 4.0.0 (Free & OpenSource Invoice App built with Laravel)”

  1. Wow that’s extraordinary! Thank you for sharing your work! I will have a good time learning by reading your code. What did you develop the app/s in and is this also available open? I’m slowly diving into app development and learning by reading and testing code would be amazing, especially from a real world app. Most tutorials cut too many corners on best practices etc.

    Reply
  2. Was going to try and install this with a Docker setup, and saw you already have one ready to go!

    Nice app, can’t wait to dive into it.

    Reply
  3. Hey! This is just… extraordinary!

    Can I ask what did you use for the mobile app? How did you achieve the social login? I am struggling a lot with that. I would really appreciate it.

    Reply
  4. One thing I would recommend doing is scrambling the alphabets on the `config/hashids.php` for each connection.

    If you utilize the same alphabet order, the hash for Invoice 1 will be the same for Estimate 1 and the same for Payment 1. This potentially makes it easier for someone to guess a hash and try to access it via your UI.

    I’d also recommend salting with a unique string for the app, so that different apps have different salts.

    I’d also recommend not using similar characters like `1` and `l` and letters that can be used for curse words. https://github.com/vinkla/hashids#curse-words-

    // https://onlinerandomtools.com/shuffle-letters

    ‘connections’ => [
    ‘main’ => [
    ‘salt’ => config(‘app.key’) . ‘main’,
    ‘length’ => 8,
    ‘alphabet’ => ‘xj9ek35m87arv6w2npbzdg4y’
    ],
    \App\Models\Agreement::class => [
    ‘salt’ => \App\Models\Agreement::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘4qm2rdnzaepw765bxv389kgyj’
    ],
    \App\Models\Contact::class => [
    ‘salt’ => \App\Models\Contact::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘dnjy63apmzxgvr792b854kew’
    ],
    \App\Models\ContactPlan::class => [
    ‘salt’ => \App\Models\ContactPlan::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘8ngxm5pzbre9vy4kj632wda7’
    ],
    \App\Models\Bookings\Calendar::class => [
    ‘salt’ => \App\Models\Bookings\Calendar::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘y7rj3x6z25nv8bdke9m4wapg’
    ],
    \App\Models\Bookings\Event::class => [
    ‘salt’ => \App\Models\Bookings\Event::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘2pn53wy64gj8earv97dbxkzm’
    ],
    \App\Models\Invoice::class => [
    ‘salt’ => \App\Models\Invoice::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘8dm6gyje47xpa3kzv9brwn52’
    ],
    \App\Models\Offer::class => [
    ‘salt’ => \App\Models\Offer::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘z4867dv2n3mjp5wybrekxag9’
    ],
    \App\Models\Plan::class => [
    ‘salt’ => \App\Models\Plan::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘nzge9mv6jwxkb3587ydpr24a’
    ],
    \App\Models\Product::class => [
    ‘salt’ => \App\Models\Product::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘yamd476pngwrx5k2vzejb389’
    ],
    \App\Models\Rank::class => [
    ‘salt’ => \App\Models\Rank::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘4832ngvzmer67x59jykpdabw’
    ],
    \App\Models\Roster::class => [
    ‘salt’ => \App\Models\Roster::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘d74xyzmngkwe5j8p32vra69b’
    ],
    \App\Models\Style::class => [
    ‘salt’ => \App\Models\Style::class . config(‘app.key’),
    ‘length’ => 8,
    ‘alphabet’ => ‘rbym76ae9d8p5j3z2gkxvn4w’
    ],

    Reply
  5. This is really nice! Only thing missing when you want to use this as a EU company is the VAT number on the invoices. But I think that shouldn’t be to hard to add it in by myself. Thanks for this amazing work

    Reply
  6. Oh wow, that’s impressive.

    Why build this app in Vue if you have a wealth of experience using React? Just curious is all 🙂

    Reply
  7. Thanks! By the way, I checked the linked GitHub and found that it’s using DomPDF. How do you handle invoice pagination and customization? Any difficulties you faced in creating the PDF templates? I’ve used it before, and found so many limitations in the styling options. Would like to know if it’s worth it or should i look at another method.

    Reply

Leave a Comment