| 1 | Preview of the final application | 11:22 |
| 2 | START HERE | 04:23 |
| 3 | create development environment, install ruby on rails 6, create app | 11:58 |
| 4 | push application to github | 03:58 |
| 5 | PRO TIP - ssh connection - push to github without re-entering password | 05:23 |
| 6 | hello world - generate a static page | 13:00 |
| 7 | connect heroku - run application in production | 07:03 |
| 8 | PRO TIP - delete changes, undo commits | 05:23 |
| 9 | AWS - no space left on device - add 20 gb storage | 03:12 |
| 10 | Install bootstrap with yarn and webpacker | 06:55 |
| 11 | Bootstrap basic usage | 04:47 |
| 12 | Install and use Fontawesome icons with yarn and webpacker | 05:34 |
| 13 | Responsive screen width | 01:08 |
| 14 | Create AWS Cloud9 environment, install Ruby on Rails 6 | 04:02 |
| 15 | Create a Ruby on Rails 6 application, configure PostgreSQL | 05:25 |
| 16 | First commit to Github | 01:21 |
| 17 | Hello World. Generating a static page | 01:44 |
| 18 | Push application to production on Heroku | 03:34 |
| 19 | FIX ISSUE: "AWS Cloud9 NO SPACE LEFT ON DEVICE" | 03:12 |
| 20 | gem haml-rails - more RoR-friendly way of editing HTML | 01:39 |
| 21 | (REVISED) Install Bootstrap with Yarn and Webpacker | 08:18 |
| 22 | gem font-awesome-sass - add cool icons for styling | 02:18 |
| 23 | gem simple_form - better way to work with forms | 00:51 |
| 24 | add a Courses table | 02:41 |
| 25 | action_text - rich text editor | 04:35 |
| 26 | gem faker and seeds.rb - add fake data to the app | 02:16 |
| 27 | gem devise for authentication (log in, log out) | 03:50 |
| 28 | course belong_to user - relationships | 04:28 |
| 29 | design for notification messages | 01:04 |
| 30 | adding a functional navbar | 02:21 |
| 31 | search field in navbar | 01:19 |
| 32 | styling courses and home index | 14:45 |
| 33 | gem friendly_id - show user friendly links | 06:14 |
| 34 | devise trackable (track user IP address, create users index page | 08:01 |
| 35 | devise confirmable in development pt1 | 06:22 |
| 36 | devise confirmable in development pt2 | 01:42 |
| 37 | sendgrid - send emails in production | 05:22 |
| 38 | Amazon SES - better way to send emails in production | 10:12 |
| 39 | add more fields to courses | 15:59 |
| 40 | gem ransack - level 1 - filter and search data in a table | 04:48 |
| 41 | gem ransack - level 2 - search and filter courses | 13:28 |
| 42 | gem ransack level 3 - search in navbar | 05:48 |
| 43 | gem public_activity - track all actions in the app | 08:20 |
| 44 | add a footer | 06:46 |
| 45 | promo - roles & authorization | 00:26 |
| 46 | gem rolify - add roles to users | 08:53 |
| 47 | gem rolify - edit user roles | 05:17 |
| 48 | gem rolify - using role based access | 02:22 |
| 49 | gem pundit - installation and example usecase | 04:21 |
| 50 | gem pundit - authorization for courses | 02:26 |
| 51 | gem pundit - only admin can edit other users | 02:41 |
| 52 | gem pundit - user can see links only to allowed actions | 02:40 |
| 53 | gem friendly_id for users, user show | 04:34 |
| 54 | check if user is online | 03:56 |
| 55 | add a Lessons table, friendly_id, styling | 11:21 |
| 56 | public_activity for Lessons, create lessons inside courses | 02:49 |
| 57 | action_text for Lessons, add breadcrumbs for lesson show | 02:52 |
| 58 | gem pundit - authorization for Lessons | 06:16 |
| 59 | nested resources. lessons in courses | 07:55 |
| 60 | gem pundit - authorization for Lessons create action | 04:11 |
| 61 | minor styling for edit and new views | 02:28 |
| 62 | production - tour around heroku | 02:14 |
| 63 | gem exception_notification - catch errors in production | 03:27 |
| 64 | design for courses and lessons | 09:22 |
| 65 | gem pagy for pagination | 07:39 |
| 66 | add dynamic title to page tabs | 08:13 |
| 67 | scaffold Enrollments. Basic validation and design | 15:18 |
| 68 | Button for user to Enroll to a Course | 21:33 |
| 69 | gem pundit for Enrollments | 03:58 |
| 70 | gem pundit - user can access his purchased Courses | 02:17 |
| 71 | work on Enrollment views | 16:40 |
| 72 | Button for user to Review a Course | 08:33 |
| 73 | gem pagy for Enrollments and Users | 03:40 |
| 74 | gem friendly_id for enrollments | 02:02 |
| 75 | gem ransack for enrollments index | 07:15 |
| 76 | Navigation for student, teacher, admin | 10:40 |
| 77 | Collections and Scopes + Ransack + Pagy for Courses and Enrollments | 18:26 |
| 78 | Counters in header | 05:21 |
| 79 | Calculate rating for courses | 10:59 |
| 80 | counter_cache basics (enrollments_count for Course) | 06:02 |
| 81 | add counter_cache across app | 12:48 |
| 82 | More course styling and validation | 09:10 |
| 83 | Courses index ransack sort by price, populararity, rating, newest | 03:09 |
| 84 | Dynamic & Personalized Homepage (Popular, New, Top Rated Courses) | 08:48 |
| 85 | Move logic from controller to model using scopes | 05:50 |
| 86 | UserCourse table - track if a user has seen a lesson. Migration and setup | 11:43 |
| 87 | Track User progress in a Course | 08:57 |
| 88 | Styling courses and lessons | 19:41 |
| 89 | Pluralization for course show | 01:43 |
| 90 | Validation for Destroy with dependent records (restrict_with_error, nullify, | 04:17 |
| 91 | Lesson show - navigation between lessons in a course | 06:24 |
| 92 | gem chartkick and groupdate - add charts | 12:46 |
| 93 | load charts without timeouts | 06:09 |
| 94 | namespace charts in routes, group by sum | 03:44 |
| 95 | count impressions with increment method | 05:45 |
| 96 | custom buttons to publish or approve a course | 21:02 |
| 97 | complex validation who can see a course show | 03:42 |
| 98 | gem public_activity - polymorphic links with nested resources | 08:44 |
| 99 | application_helper for conditional styling | 04:28 |
| 100 | gem rails-erd to generate relationship-diagrams automatically | 03:12 |
| 101 | better views for not logged in users | 03:52 |
| 102 | link_to courses with ransack search params | 04:03 |
| 103 | course-specific charts and analytics, more advanced grouping | 10:47 |
| 104 | update course_policy and view | 04:10 |
| 105 | promo - sort records | 00:18 |
| 106 | gem ranked_model - give lessons inside a course a number | 03:44 |
| 107 | link to previous and next lesson in lesson show | 03:08 |
| 108 | jquery-ui sortable - make lessons sortable and persist changes | 11:14 |
| 109 | promo - active_storage & action_text | 00:23 |
| 110 | credentials and secret keys PART 1 | 06:08 |
| 111 | gem aws-sdk-s3, configure aws s3 bucket storage, add avatar to courses | 16:52 |
| 112 | gem active_storage_validations. validates course avatar. display avatar in co | 10:11 |
| 113 | gem image_processing to fix action_text displaying images, S3 bucket CORS set | 04:08 |
| 114 | credentials and secret keys PART 2 - PRODUCTION | 01:42 |
| 115 | action_text attachment restrictions, download and display | 09:36 |
| 116 | action_text restrict attachments, more validations for course and lesson | 10:18 |
| 117 | video attachment and preview with active_storage and HTML5 | 07:15 |
| 118 | styling lessons, video validation | 06:53 |
| 119 | deleting attachments (video and video_thumbnail) | 06:51 |
| 120 | action_text - allow file upload, add video preview to blob | 04:35 |
| 121 | action_text - play audio with HTML5 | 02:30 |
| 122 | video.js player integration | 05:57 |
| 123 | simple_form for rich_text_area (actiontext) | 02:22 |
| 124 | action_text youtube embeds | 06:53 |
| 125 | promo - nested comments | 00:24 |
| 126 | nested resources - comments inside lessons | 26:30 |
| 127 | counter_cache for comments, method to delete comment | 16:51 |
| 128 | public_activity for comments | 04:59 |
| 129 | pundit authorization for destroying a comment | 03:11 |
| 130 | add counter_cache for user_lessons to lessons and users | 04:22 |
| 131 | promo - preparing for production | 00:23 |
| 132 | gem recaptcha with devise - no bot signups | 06:32 |
| 133 | add recaptcha keys to credentials | 02:30 |
| 134 | add google analytics | 07:10 |
| 135 | styling app, adding logo and thumbnail | 09:49 |
| 136 | downgrade jquery to 3.4.1 to make bootstrap navbar dropdown work on small screen | 01:35 |
| 137 | yarn remove video.js - remove library from our app | 02:28 |
| 138 | connecting a domain to our application in production | 04:57 |
| 139 | disable video download (disable rightclick on video) | 02:16 |
| 140 | privacy_policy and SEO tags | 03:40 |
| 141 | adding a licence to our github repository | 01:36 |
| 142 | beautify devise views | 12:04 |
| 143 | Add a sitemap for Google and Bing search | 05:38 |
| 144 | promo - social login | 00:31 |
| 145 | gem omniauth-google-oauth2 - log in with google | 11:20 |
| 146 | import omniauth user personal data | 08:48 |
| 147 | gem omniauth-github - log in with github | 04:15 |
| 148 | different credentials for different environments. Github | 05:53 |
| 149 | gem omniauth-facebook - log in with facebook | 10:09 |
| 150 | refactor omniauth (clean up code) | 04:44 |
| 151 | promo - select or create with selectize-js | 00:59 |
| 152 | selectize.js - course has many tags through course_tags | 15:33 |
| 153 | two ways to search courses by tags with ransack | 11:11 |
| 154 | link to current page with params (for searching tags) | 03:17 |
| 155 | selectize.js - select or create tag | 04:55 |
| 156 | admin can manage and delete tags | 15:23 |
| 157 | list similar courses in course show based on tags | 06:24 |
| 158 | promo - PDF generation | 00:37 |
| 159 | gem wicked_pdf - ability to generate PDF from HTML | 08:31 |
| 160 | enrollment completion certificate and styling | 07:20 |
| 161 | pdf.html - remove unused code, enrollments index - link to certificate | 05:06 |
| 162 | different pdf gem for development and production | 03:26 |
| 163 | styling pdf certificate of completion | 04:35 |
| 164 | certificate of completion only for completed courses | 04:56 |
| 165 | helper logic to view certificate of completion | 08:23 |
| 166 | promo - multistep forms | 00:19 |
| 167 | gem wicked for multistep forms | 20:41 |
| 168 | gem wicked - nest course_wizard inside courses | 05:45 |
| 169 | gem wicked - edit and update functionality | 08:11 |
| 170 | gem wicked - styling and authorization | 05:30 |
| 171 | layout for wizard steps, remove course edit action | 06:09 |
| 172 | styling wizard progress navigation, remove fields course form | 09:57 |
| 173 | email confirmation when a user enrolled to a course | 11:46 |
| 174 | email to teacher when a user enrolls to his course | 05:41 |
| 175 | user_mailer - send all admins emails when a new user registers | 05:50 |
| 176 | install gem cocoon. edit lessons in course form | 12:50 |
| 177 | payments - business logic for user income and expenses calculation | 20:23 |
| 178 | payments with stripe part 1 | 15:17 |
| 179 | payments with stripe part 2 | 10:19 |
| 180 | Upgrading to Rails EDGE and troubleshooting active_storage issues | 02:59 |
| 181 | downgrading Rails and fixing selectize issues | 03:35 |
| 182 | downgrading Rails and fixing active_storage issues | 02:40 |
| 183 | Update to rails 6.0.3 | 02:09 |
| 184 | renaming a column (short- to marketing- description) | 05:18 |
| 185 | gem public_activity for user | 05:57 |
| 186 | footer always on bottom | 03:09 |
| 187 | gem sitemap_generator, edit robots.txt | 08:41 |
| 188 | sitemaps working on heroku with AWS S3 public repo | 07:55 |
| 189 | Run the Corsego source code in development | 14:26 |
| 190 | Roadmap. Next steps. | 04:48 |
| 191 | Thank you | 00:30 |