SlideShare a Scribd company logo
1 of 27
Download to read offline
How Missions.Me is Embracing Laravel.
About Me
• Lead Developer
• Full-stack PHP Developer
• From designer to developer
• Experience in SEO & CRO
• Volunteer student pastor and
world traveler.
Meet the Team The Missions.Me Staff
About Us
• Faith-based international
non-profit charity based in
Rochester, MI
• Hosted thousands of
travelers since 2004. Over 44
trips to 4 continents and
dozens of countries.
• Facilitate humanitarian aid
including water wells,
houses, rescue homes,
orphanages, shoes, and
more.
One Nation One Day
The greatest achievements
begin with audacious questions
MM Network of Sites
• dominicrusso.com
• angelhouse.me
• 1nation1day.com, shop.1nation1day.com
• lamejorrepdominicana.com
• missions.me, api.missions.me
The MM App
• Website (marketing, info)
• CMS (staff & users)
• CRM
• Crowd Fundraising Tool
• Social Network
• Web Service (API for mobile
apps - iOS, Android)
MM App Overview
• Frontend Website

Marketing, information, etc.
• User application

Mange trip reservations, projects, fundraisers, donations,
records, profile
• Admin portal

CMS, CRM
• Web Services

API for Mobile Missions app (iOS, Android)
Current Setup
• Two networked SSD VPS on Digital Ocean
managed by Forge with a MySQL database
• Laravel 4.2, and Lumen; Bootstrap 3, jQuery, Vue.js
• Beanstalkd, Google Apps for Non-profits (SMTP)
• authorize.Net API payment gateway
• MaxCDN; BugSnag; GitHub
Evolution of MM App
• Started with Codeignitor, Foundation; Shared web
hosting, FTP, and no version control!
• 3 mo. development time, 6 developers, bankrupt
our startup, launched v1.0 in the summer of 2013.
• I was hired full-time in October 2013. I rebuilt the
app by myself in one month, using Laravel 4.0.
• By Mid 2014 we’d upgraded to Larvel 4.2 and
migrated to DigitalOcean and Forge.
- Leonardo da Vinci
“Simplicity is the ultimate sophistication.”
Timezones
PROBLEMS:
- Deadlines for everything.
- International user base.
- Admins setting deadlines in EST but the server
saves and returns UTC.
Timezones
SOLUTION:
- Accessor and Mutator
methods on models.
- Carbon library to add or
subtract the necessary GMT
offsets and set the correct
timezone.
Relationships
PROBLEMS:
- Database normalization can
require a lot of extra tables.
- A user has the following
relationships: contact, profile,
timezone, shirt size, groups …
- Admin created content needs
a table. Then that content gets
manipulated by a user, so that
needs a new table; so on and
so on.
Relationships
SOLUTION: 

Eloquent Relationship Methods
- One to One
- One to Many
- Many to Many
- Polymorphic
- Many to Many Polymorphic
(Yes I’m using all of them!)
BIG Data
PROBLEMS:
- N+1,
- detailed filters and searches
- exporting, Eloquent
sometimes too slow for large
memory-intensive exports
(server time outs).
BIG Data
SOLUTIONS:
Eager loading for N+1 issue.
URI query strings with
Query Scopes in the models
allowed for thousands of
result variations.
Query builder, raw SQL
statements, and pushing
that logic to a queue job, I
was able to get the export
speed needed.
Permissions
PROBLEM:
Admins, staff, interns,
group owners, user
content management,
etc.
This requires more
than authentication.
Permissions
SOLUTION:
Created a permissions
table with boolean
attributes (more control
than user roles).
Using Laravel’s route
filters I can check a
user’s access permission
on protected routes.
Slugable
PROBLEM:
A lot of pages need
user-friendly URLs
over numerical IDs
(pages, profiles,
projects, fundraisers,
etc.)
Slugable
SOLUTION:
The power of
polymorphism!
Use a slugs table,
validation to ensure
unique slugs, a
polymorphic relationship,
and a PagesController to
lookup a slug and then
route it to it’s class type.
Security
PROBLEM:
We save a lot of sensitive
personal information.
Medical records, passport
copies, visas, etc.
We have to comply with
laws: PCI, Hippa
Security
SOLUTION:
We can encrypt using
Laravel’s Bcrypt method.
We can store and retrieve
files in a secure app/
storage outside the public
directory using Laravel’s
file class.
Time Savers
Automate “chores”
and “tedious” tasks
with custom artisan
commands.
Example: grab all
profile pics, rename,
and organize in
minutes
Scaling
Missions.Me works at a
relentless pace, is
growing rapidly, and is
a pioneer in it’s
industry.
Mobile Missions API in
just 4 weeks using
Lumen.
lamejorrepdominicana.
com - 1 week dev time
with Laravel.
Workflow
Task based rapid
prototyping
SCRUM and Agile
practices
Git-flow branching
model: Master,
Develop, Feature,
Release, Hotfix
The Future of MM
• Refactor - some code is 2 years old - lots of code smells!
• Upgrade to Laravel 5.1
• Move to distributed system managed with Envoyer - load
balancer, multi-servers, zero down time
• Adopt an API centric architecture (Lumen micro-services)
• Create a richer UI with a JavaScript framework (polymer,
vue.js)
• Offer Missions.Me as a SAAS

More Related Content

Similar to How Missions.Me is Embracing Laravel

User Testing your Drupal Administration Process
User Testing your Drupal Administration ProcessUser Testing your Drupal Administration Process
User Testing your Drupal Administration ProcessVanessa Turke
 
Learning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchLearning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchThiam Hock Ng
 
Neil Perlin - We're Going Mobile! Great! Are We Ready?
Neil Perlin - We're Going Mobile! Great! Are We Ready?Neil Perlin - We're Going Mobile! Great! Are We Ready?
Neil Perlin - We're Going Mobile! Great! Are We Ready?LavaConConference
 
Pre-Aggregated Analytics And Social Feeds Using MongoDB
Pre-Aggregated Analytics And Social Feeds Using MongoDBPre-Aggregated Analytics And Social Feeds Using MongoDB
Pre-Aggregated Analytics And Social Feeds Using MongoDBRackspace
 
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal Intro
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal IntroDrupal Global Training Day by Drupal Mumbai 6th Sep - Drupal Intro
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal IntroDrupalMumbai
 
CV - Imran Ali
CV - Imran AliCV - Imran Ali
CV - Imran AliImran Ali
 
USG Rock Eagle 2017 - PWP at 1000 Days
USG Rock Eagle 2017 - PWP at 1000 DaysUSG Rock Eagle 2017 - PWP at 1000 Days
USG Rock Eagle 2017 - PWP at 1000 DaysEric Sembrat
 
scraplr presentation
scraplr presentationscraplr presentation
scraplr presentationanggikrisna
 
DrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalDrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalRod Martin
 
Opening Keynote - DrupalCamp St. Louis 2014
Opening Keynote - DrupalCamp St. Louis 2014Opening Keynote - DrupalCamp St. Louis 2014
Opening Keynote - DrupalCamp St. Louis 2014Brad Nowak
 
Neev Expertise in Ruby on Rails (RoR)
Neev Expertise in Ruby on Rails (RoR)Neev Expertise in Ruby on Rails (RoR)
Neev Expertise in Ruby on Rails (RoR)Neev Technologies
 
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...Jessica Tai
 
Odata V4 : The New way to REST for Your Applications
Odata V4 : The New way to REST for Your Applications Odata V4 : The New way to REST for Your Applications
Odata V4 : The New way to REST for Your Applications Alok Chhabria
 
GDD Moscow - Open Social
GDD Moscow - Open SocialGDD Moscow - Open Social
GDD Moscow - Open SocialChris Chabot
 
Social networks: technical issues
Social networks: technical issuesSocial networks: technical issues
Social networks: technical issuesMorgan Magnin
 
Developing Information Architecture with Non-Technical Stakeholders
Developing Information Architecture with Non-Technical StakeholdersDeveloping Information Architecture with Non-Technical Stakeholders
Developing Information Architecture with Non-Technical StakeholdersVanessa Turke
 

Similar to How Missions.Me is Embracing Laravel (20)

User Testing your Drupal Administration Process
User Testing your Drupal Administration ProcessUser Testing your Drupal Administration Process
User Testing your Drupal Administration Process
 
Learning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchLearning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails Launch
 
Neil Perlin - We're Going Mobile! Great! Are We Ready?
Neil Perlin - We're Going Mobile! Great! Are We Ready?Neil Perlin - We're Going Mobile! Great! Are We Ready?
Neil Perlin - We're Going Mobile! Great! Are We Ready?
 
Pre-Aggregated Analytics And Social Feeds Using MongoDB
Pre-Aggregated Analytics And Social Feeds Using MongoDBPre-Aggregated Analytics And Social Feeds Using MongoDB
Pre-Aggregated Analytics And Social Feeds Using MongoDB
 
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal Intro
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal IntroDrupal Global Training Day by Drupal Mumbai 6th Sep - Drupal Intro
Drupal Global Training Day by Drupal Mumbai 6th Sep - Drupal Intro
 
Web technology unit I - Part A
Web technology unit I -  Part AWeb technology unit I -  Part A
Web technology unit I - Part A
 
CV - Imran Ali
CV - Imran AliCV - Imran Ali
CV - Imran Ali
 
USG Rock Eagle 2017 - PWP at 1000 Days
USG Rock Eagle 2017 - PWP at 1000 DaysUSG Rock Eagle 2017 - PWP at 1000 Days
USG Rock Eagle 2017 - PWP at 1000 Days
 
scraplr presentation
scraplr presentationscraplr presentation
scraplr presentation
 
DrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalDrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to Drupal
 
Opening Keynote - DrupalCamp St. Louis 2014
Opening Keynote - DrupalCamp St. Louis 2014Opening Keynote - DrupalCamp St. Louis 2014
Opening Keynote - DrupalCamp St. Louis 2014
 
Neev Expertise in Ruby on Rails (RoR)
Neev Expertise in Ruby on Rails (RoR)Neev Expertise in Ruby on Rails (RoR)
Neev Expertise in Ruby on Rails (RoR)
 
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...
[Annotated] QConSF 2018: Airbnb's Great Migration - From Monolith to Service-...
 
Odata V4 : The New way to REST for Your Applications
Odata V4 : The New way to REST for Your Applications Odata V4 : The New way to REST for Your Applications
Odata V4 : The New way to REST for Your Applications
 
NSBudapest Presentation
NSBudapest PresentationNSBudapest Presentation
NSBudapest Presentation
 
GDD Moscow - Open Social
GDD Moscow - Open SocialGDD Moscow - Open Social
GDD Moscow - Open Social
 
Ankur Bajad
Ankur BajadAnkur Bajad
Ankur Bajad
 
Social networks: technical issues
Social networks: technical issuesSocial networks: technical issues
Social networks: technical issues
 
Developing Information Architecture with Non-Technical Stakeholders
Developing Information Architecture with Non-Technical StakeholdersDeveloping Information Architecture with Non-Technical Stakeholders
Developing Information Architecture with Non-Technical Stakeholders
 
Welcome to the World of WordPress
Welcome to the World of WordPressWelcome to the World of WordPress
Welcome to the World of WordPress
 

Recently uploaded

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 

Recently uploaded (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

How Missions.Me is Embracing Laravel

  • 1. How Missions.Me is Embracing Laravel.
  • 2. About Me • Lead Developer • Full-stack PHP Developer • From designer to developer • Experience in SEO & CRO • Volunteer student pastor and world traveler.
  • 3. Meet the Team The Missions.Me Staff
  • 4. About Us • Faith-based international non-profit charity based in Rochester, MI • Hosted thousands of travelers since 2004. Over 44 trips to 4 continents and dozens of countries. • Facilitate humanitarian aid including water wells, houses, rescue homes, orphanages, shoes, and more.
  • 5. One Nation One Day The greatest achievements begin with audacious questions
  • 6. MM Network of Sites • dominicrusso.com • angelhouse.me • 1nation1day.com, shop.1nation1day.com • lamejorrepdominicana.com • missions.me, api.missions.me
  • 7. The MM App • Website (marketing, info) • CMS (staff & users) • CRM • Crowd Fundraising Tool • Social Network • Web Service (API for mobile apps - iOS, Android)
  • 8. MM App Overview • Frontend Website
 Marketing, information, etc. • User application
 Mange trip reservations, projects, fundraisers, donations, records, profile • Admin portal
 CMS, CRM • Web Services
 API for Mobile Missions app (iOS, Android)
  • 9. Current Setup • Two networked SSD VPS on Digital Ocean managed by Forge with a MySQL database • Laravel 4.2, and Lumen; Bootstrap 3, jQuery, Vue.js • Beanstalkd, Google Apps for Non-profits (SMTP) • authorize.Net API payment gateway • MaxCDN; BugSnag; GitHub
  • 10. Evolution of MM App • Started with Codeignitor, Foundation; Shared web hosting, FTP, and no version control! • 3 mo. development time, 6 developers, bankrupt our startup, launched v1.0 in the summer of 2013. • I was hired full-time in October 2013. I rebuilt the app by myself in one month, using Laravel 4.0. • By Mid 2014 we’d upgraded to Larvel 4.2 and migrated to DigitalOcean and Forge.
  • 11. - Leonardo da Vinci “Simplicity is the ultimate sophistication.”
  • 12. Timezones PROBLEMS: - Deadlines for everything. - International user base. - Admins setting deadlines in EST but the server saves and returns UTC.
  • 13. Timezones SOLUTION: - Accessor and Mutator methods on models. - Carbon library to add or subtract the necessary GMT offsets and set the correct timezone.
  • 14. Relationships PROBLEMS: - Database normalization can require a lot of extra tables. - A user has the following relationships: contact, profile, timezone, shirt size, groups … - Admin created content needs a table. Then that content gets manipulated by a user, so that needs a new table; so on and so on.
  • 15. Relationships SOLUTION: 
 Eloquent Relationship Methods - One to One - One to Many - Many to Many - Polymorphic - Many to Many Polymorphic (Yes I’m using all of them!)
  • 16. BIG Data PROBLEMS: - N+1, - detailed filters and searches - exporting, Eloquent sometimes too slow for large memory-intensive exports (server time outs).
  • 17. BIG Data SOLUTIONS: Eager loading for N+1 issue. URI query strings with Query Scopes in the models allowed for thousands of result variations. Query builder, raw SQL statements, and pushing that logic to a queue job, I was able to get the export speed needed.
  • 18. Permissions PROBLEM: Admins, staff, interns, group owners, user content management, etc. This requires more than authentication.
  • 19. Permissions SOLUTION: Created a permissions table with boolean attributes (more control than user roles). Using Laravel’s route filters I can check a user’s access permission on protected routes.
  • 20. Slugable PROBLEM: A lot of pages need user-friendly URLs over numerical IDs (pages, profiles, projects, fundraisers, etc.)
  • 21. Slugable SOLUTION: The power of polymorphism! Use a slugs table, validation to ensure unique slugs, a polymorphic relationship, and a PagesController to lookup a slug and then route it to it’s class type.
  • 22. Security PROBLEM: We save a lot of sensitive personal information. Medical records, passport copies, visas, etc. We have to comply with laws: PCI, Hippa
  • 23. Security SOLUTION: We can encrypt using Laravel’s Bcrypt method. We can store and retrieve files in a secure app/ storage outside the public directory using Laravel’s file class.
  • 24. Time Savers Automate “chores” and “tedious” tasks with custom artisan commands. Example: grab all profile pics, rename, and organize in minutes
  • 25. Scaling Missions.Me works at a relentless pace, is growing rapidly, and is a pioneer in it’s industry. Mobile Missions API in just 4 weeks using Lumen. lamejorrepdominicana. com - 1 week dev time with Laravel.
  • 26. Workflow Task based rapid prototyping SCRUM and Agile practices Git-flow branching model: Master, Develop, Feature, Release, Hotfix
  • 27. The Future of MM • Refactor - some code is 2 years old - lots of code smells! • Upgrade to Laravel 5.1 • Move to distributed system managed with Envoyer - load balancer, multi-servers, zero down time • Adopt an API centric architecture (Lumen micro-services) • Create a richer UI with a JavaScript framework (polymer, vue.js) • Offer Missions.Me as a SAAS