1 00:00:00,210 --> 00:00:00,800 All right. 2 00:00:00,810 --> 00:00:06,780 In this video we'll be wrapping up this section by actually getting our task manager app deployed to 3 00:00:06,780 --> 00:00:13,320 production and when it's deployed to production and running on Heroku it'll be connecting to our production 4 00:00:13,320 --> 00:00:17,130 database we created in the last lesson. 5 00:00:17,130 --> 00:00:20,530 Now to get started let's just clean up our workspace a little bit. 6 00:00:20,550 --> 00:00:28,350 The only file I'm going to leave open is a dev dot EMV so I'll right click that I will click close others 7 00:00:29,250 --> 00:00:34,560 and then we're gonna go ahead and collapse all of the expanded directories using this little guy right 8 00:00:34,560 --> 00:00:35,590 here. 9 00:00:35,610 --> 00:00:41,160 Now we're still going to work in the task manager app though I just wanted to start with a simpler setup 10 00:00:41,400 --> 00:00:45,320 without all of those open files cluttering the workspace. 11 00:00:45,330 --> 00:00:50,790 Now the first thing I'd like to take a quick moment to do is to delete some stuff in the task manager 12 00:00:50,790 --> 00:00:54,660 project that we're not going to commit and push up. 13 00:00:54,660 --> 00:00:59,700 That is the playground directory which contains a couple of examples we worked through earlier in the 14 00:00:59,700 --> 00:01:00,780 class. 15 00:01:00,810 --> 00:01:06,410 Now you can leave the playground folder in the root of the node course directory in place. 16 00:01:06,420 --> 00:01:12,000 I'm specifically deleting in the playground directory in the task manager directory. 17 00:01:12,000 --> 00:01:18,240 So right here I'll go ahead and remove that and from here we're now going to initialize this project 18 00:01:18,270 --> 00:01:20,180 as a repository. 19 00:01:20,220 --> 00:01:26,370 And if you remember from a few sections ago we do that using get in it from the terminal. 20 00:01:26,370 --> 00:01:32,400 Now from here we see that over on the right hand side we're getting a warning from Visual Studio code. 21 00:01:32,490 --> 00:01:39,390 It's complaining that we have too many active changes and that only some of the features that VRC supports 22 00:01:39,390 --> 00:01:40,380 will work. 23 00:01:40,380 --> 00:01:45,620 And this is just because currently we are set up to track node modules. 24 00:01:45,660 --> 00:01:49,620 We'll fix that by ignoring it in just a moment for the moment though. 25 00:01:49,620 --> 00:01:55,290 Let's take a quick second to run and get status and we can see all of the stuff that would be committed 26 00:01:55,350 --> 00:01:58,370 should we add it and run get commit right here. 27 00:01:58,500 --> 00:02:05,160 We want to ignore node modules like we had done before with the weather application and we also want 28 00:02:05,160 --> 00:02:07,680 to ignore the config directory. 29 00:02:07,680 --> 00:02:13,380 The whole purpose of breaking those values out into environment variables was to make sure that they 30 00:02:13,380 --> 00:02:15,030 don't get into the wrong hands. 31 00:02:15,030 --> 00:02:19,620 So those are not something that we're going to commit and push. 32 00:02:19,620 --> 00:02:24,570 If someone else wants to download our project and work on it they'll have to set up their own config 33 00:02:24,570 --> 00:02:29,660 directory with Dev dot EMV to define these four values. 34 00:02:29,700 --> 00:02:30,930 So what does that mean for us. 35 00:02:30,930 --> 00:02:38,370 Well that means in the task manager project we're going to create dot get ignore to set up those directories 36 00:02:38,370 --> 00:02:39,360 we want to ignore. 37 00:02:39,600 --> 00:02:41,400 And the first is node modules 38 00:02:44,380 --> 00:02:48,150 now after node modules we're also going to ignore config. 39 00:02:48,360 --> 00:02:54,110 Then we can save the get ignore file and we can see that in the sidebar both of those are now grayed 40 00:02:54,170 --> 00:02:54,920 out. 41 00:02:54,950 --> 00:03:00,350 So the only things we'll be actually adding to the repository are these three files right here. 42 00:03:00,350 --> 00:03:05,210 And whatever is inside of the source directory down below in the terminal. 43 00:03:05,240 --> 00:03:09,350 Let's go ahead and actually create our very first commit. 44 00:03:09,350 --> 00:03:14,480 Once again I'll run and get status just to take a look and make sure everything is working and right 45 00:03:14,480 --> 00:03:19,400 here I no longer see node modules or config which is good. 46 00:03:19,400 --> 00:03:26,720 Then we'll run get ad dot to go ahead and add everything in the entourage files area to the staging 47 00:03:26,720 --> 00:03:27,680 area. 48 00:03:27,680 --> 00:03:31,240 And finally we'll use get commit to create the commit. 49 00:03:31,280 --> 00:03:32,210 So that would be. 50 00:03:32,210 --> 00:03:39,210 Get commit with the M flag to provide our message right here inside of quotes and for an initial comment. 51 00:03:39,230 --> 00:03:43,240 I usually use in it commit as my message. 52 00:03:43,280 --> 00:03:46,880 Now let's go ahead and actually commit all of those changes. 53 00:03:46,880 --> 00:03:53,120 And with that in place we're ready to take this project and actually push it up to services like get 54 00:03:53,120 --> 00:03:54,860 hub and Heroku. 55 00:03:54,860 --> 00:03:59,760 We're gonna start by setting things up on github and then we'll switch over to Heroku. 56 00:03:59,780 --> 00:04:04,340 First up we have to create a new repository for our project on Github. 57 00:04:04,340 --> 00:04:06,730 So I'm going to navigate over to the browser. 58 00:04:06,770 --> 00:04:11,850 And like we did a few sections ago we'll go over to get hub dot com. 59 00:04:11,870 --> 00:04:17,110 Now it sends the last time I worked with get hub in creating a repository in this class. 60 00:04:17,180 --> 00:04:23,030 Private repositories have been added to that free plan which means you can convert your other get Hub 61 00:04:23,030 --> 00:04:27,890 projects over to private even if you're not paying get hub anything. 62 00:04:27,980 --> 00:04:32,980 And this new one you create could be created as a private repository as well. 63 00:04:33,080 --> 00:04:37,060 So I'll use that plus sign with new repository to create it. 64 00:04:37,130 --> 00:04:42,170 Let's go ahead and pick a name I'll use Task Manager API. 65 00:04:42,170 --> 00:04:44,900 We can leave the description empty and down below. 66 00:04:44,900 --> 00:04:49,760 I'll switch this over to private and I will create the new repository. 67 00:04:49,760 --> 00:04:54,340 Now as we saw a few sections ago there are three ways we can get started. 68 00:04:54,350 --> 00:04:59,500 And we wanted this one push an existing repository from the command line. 69 00:04:59,510 --> 00:05:02,200 We just need to run these two commands. 70 00:05:02,270 --> 00:05:05,270 Now we already explored what exactly these do. 71 00:05:05,270 --> 00:05:09,450 So we can just go ahead and copy and paste them this time around. 72 00:05:09,560 --> 00:05:12,380 I'll take the first command and bring it over here. 73 00:05:12,470 --> 00:05:15,050 I will paste it into the terminal and run it. 74 00:05:15,050 --> 00:05:20,270 That sets up the correct remote letting get know where it should push the code. 75 00:05:20,270 --> 00:05:26,000 Then the second command is the command that actually pushes the code to the server for the very first 76 00:05:26,000 --> 00:05:26,870 time. 77 00:05:26,960 --> 00:05:30,110 I'll paste that in and run that as well. 78 00:05:30,110 --> 00:05:34,490 Now once that's done we should be able to head back over to get hub. 79 00:05:34,490 --> 00:05:40,690 We should be able to refresh the page and we see our actual code showing up which is great. 80 00:05:40,700 --> 00:05:43,880 Right here we do have this as a private repository. 81 00:05:44,150 --> 00:05:48,690 And I can see my source directory with my other configuration files. 82 00:05:48,830 --> 00:05:54,490 So now that we have things in place with get hub we want to switch our attention over to Heroku. 83 00:05:54,710 --> 00:06:00,080 Now in general the process is going to be pretty similar to what we did the last time we deployed to 84 00:06:00,080 --> 00:06:01,100 Heroku. 85 00:06:01,220 --> 00:06:07,850 The only additional consideration is that our application code now relies on these environment variables 86 00:06:07,910 --> 00:06:14,150 actually existing and currently they're not going to exist on the Heroku app for us. 87 00:06:14,150 --> 00:06:19,640 There's some commands we can run from the terminal to set those up so let's get started by creating 88 00:06:19,640 --> 00:06:23,190 the Heroku application down below from the terminal. 89 00:06:23,210 --> 00:06:30,600 I'll use clear to clear the terminal output and then after that we'll go ahead and use Heroku create 90 00:06:30,600 --> 00:06:32,310 to create our new app. 91 00:06:32,400 --> 00:06:37,500 Now as you remember you can provide a name right here for your application. 92 00:06:37,500 --> 00:06:40,930 Otherwise Heroku will just pick a random one for you. 93 00:06:41,370 --> 00:06:45,060 I'm going to use Mead hyphen task manager. 94 00:06:45,060 --> 00:06:52,180 And remember this name needs to be unique across all Heroku applications not just those in your account. 95 00:06:52,200 --> 00:06:58,740 So typically I'll prefix my app name with either my last name if it's a personal project or the company 96 00:06:58,740 --> 00:07:01,170 name if it's for a client. 97 00:07:01,170 --> 00:07:05,160 Now right here we can see that everything has been created successfully. 98 00:07:05,190 --> 00:07:10,980 We have the U.R.L. that we'll be able to visit in the browser to view the application and we have the 99 00:07:10,980 --> 00:07:15,000 repository remote which has already been set up for us. 100 00:07:15,000 --> 00:07:18,480 We now have the origin remote to push our code to get hub. 101 00:07:18,750 --> 00:07:23,390 And we have the Heroku remote to push our code up to her Roku. 102 00:07:23,460 --> 00:07:29,910 Now before we push to Heroku we do want to set up those environment variables and we're going to do 103 00:07:29,910 --> 00:07:36,870 that from right here in the terminal using a command known as Heroku config so we can use the config 104 00:07:36,870 --> 00:07:44,230 command to set environment variables read our existing environment variables and delete values. 105 00:07:44,490 --> 00:07:53,050 So right here to set them we use Heroku config colon set followed by those key value pairs. 106 00:07:53,060 --> 00:07:57,970 So key equals value just like we have up above. 107 00:07:58,040 --> 00:08:04,580 Now if we actually run this command it is going to set up the environment variable called key with the 108 00:08:04,640 --> 00:08:12,050 value value and you can always see exactly what environment variables you have configured by just running 109 00:08:12,050 --> 00:08:16,200 Heroku config with no other characters afterwards. 110 00:08:16,220 --> 00:08:23,390 Right here I can see that for my application I just have one configured variable key with added value 111 00:08:23,480 --> 00:08:24,610 value. 112 00:08:24,620 --> 00:08:30,470 Now let's go ahead and remove this example one and set up the three real ones we actually need right 113 00:08:30,470 --> 00:08:33,020 here to remove an environment variable. 114 00:08:33,020 --> 00:08:41,150 We use Heroku config again this time though instead of colon set it is colon unset followed by the name 115 00:08:41,150 --> 00:08:44,290 of the environment variable here it's key. 116 00:08:44,390 --> 00:08:50,720 So if I run that it is going to remove it and if I rerun Heroku config to view the entire list we're 117 00:08:50,720 --> 00:08:52,850 gonna see there are none. 118 00:08:52,850 --> 00:08:59,090 Now let's go ahead and use Heroku config set once again to set up the real ones we actually need. 119 00:08:59,090 --> 00:09:02,280 So right here Heroku config colon set. 120 00:09:02,540 --> 00:09:10,010 We're going to start with JWT underscore secret and this name needs to match up perfectly with the name 121 00:09:10,010 --> 00:09:11,110 up above. 122 00:09:11,150 --> 00:09:15,860 Otherwise the code is not going to be able to find it when your app runs on Heroku. 123 00:09:15,980 --> 00:09:19,800 Right here we're gonna set that equal to whatever value we'd like. 124 00:09:19,820 --> 00:09:25,670 We can go ahead and just pick a random series of characters or use a password generator. 125 00:09:25,670 --> 00:09:29,740 And next up we're gonna go ahead and set up the send grid API key. 126 00:09:30,050 --> 00:09:33,190 So right here we can actually copy that from up above. 127 00:09:33,200 --> 00:09:34,370 If we wanted to. 128 00:09:34,760 --> 00:09:36,880 So I'm going to take this entire line. 129 00:09:36,890 --> 00:09:40,100 Copy it to the clipboard and paste it down below. 130 00:09:40,100 --> 00:09:46,290 So after a space we can set up another key value pair we want to configure I'll go ahead and paste these 131 00:09:46,300 --> 00:09:53,300 send grid one in I'm going to fire that off and that's going to set those two environment variables 132 00:09:53,540 --> 00:09:57,480 and we can see them right here and everything is looking good so far. 133 00:09:57,650 --> 00:10:01,530 The last one we need to set is Mongo D.B. U.R.L.. 134 00:10:01,640 --> 00:10:02,440 And for that one. 135 00:10:02,480 --> 00:10:07,580 Once again we need the connection string that Mongo DB Atlas provided us. 136 00:10:07,580 --> 00:10:09,730 That means we need our connection string. 137 00:10:09,740 --> 00:10:16,370 Once again we're going to head back over to the browser go back over to Atlas and we're going to navigate 138 00:10:16,370 --> 00:10:20,090 away from the user's page and back to overview. 139 00:10:20,090 --> 00:10:25,210 So we're switching from security to overview and we'll just click connect once again. 140 00:10:25,220 --> 00:10:27,100 Now here we have those three options. 141 00:10:27,110 --> 00:10:33,410 This time we're trying to connect to our database from our application and we will use these short s 142 00:10:33,430 --> 00:10:35,510 our v connection string. 143 00:10:35,510 --> 00:10:38,120 And down below we can copy that to the clipboard. 144 00:10:38,540 --> 00:10:42,740 Now once again the user password is not embedded in this string. 145 00:10:42,740 --> 00:10:45,220 We're gonna have to manually provide that. 146 00:10:45,350 --> 00:10:50,400 So for the moment let's go ahead and actually add this up here in dev dot EMV. 147 00:10:50,470 --> 00:10:53,570 And just so we can edit the string it's not going to live here. 148 00:10:53,570 --> 00:10:57,660 Then we'll use it in another Heroku config set command down below. 149 00:10:58,190 --> 00:11:04,730 So right here everything between the colon and the at sign that is where the password needs to go. 150 00:11:04,730 --> 00:11:13,400 So I'll remove the place holder and I'll type my actual password my D.B. pass 0 7 followed by two exclamation 151 00:11:13,400 --> 00:11:14,330 marks. 152 00:11:14,330 --> 00:11:16,060 Now this has since been changed. 153 00:11:16,070 --> 00:11:22,670 So if you try to connect using these credentials it is not going to work as expected but this is indeed 154 00:11:22,730 --> 00:11:24,280 my connection string. 155 00:11:24,350 --> 00:11:26,480 So I'm going to highlight the entire thing. 156 00:11:26,660 --> 00:11:31,550 Copy it to the clipboard and then delete it from dev dot EMV. 157 00:11:31,550 --> 00:11:38,090 So now that I have the finalized connection string we're gonna use Heroku config colon set. 158 00:11:38,090 --> 00:11:46,040 Once again we're setting up Mongo D.B. underscore U.R.L. typed exactly like we had it above and we're 159 00:11:46,040 --> 00:11:48,530 setting that equal to the following. 160 00:11:48,530 --> 00:11:54,110 Now if you have a special characters inside of your U.R.L. you're gonna have to wrap it in quotes if 161 00:11:54,110 --> 00:11:59,540 you're on Mac or Linux you're likely going to want to use single quotes if you're on Windows you're 162 00:11:59,540 --> 00:12:01,770 going to want to use double quotes. 163 00:12:01,790 --> 00:12:08,390 So right here I'll open up a single quote I will paste in the U.R.L. and add the closing single quote 164 00:12:08,450 --> 00:12:09,320 on the end. 165 00:12:09,320 --> 00:12:15,290 Now if we take a look at the U.R.L. structure we'll notice that we have a forward slash test right after 166 00:12:15,290 --> 00:12:17,330 Mongo D.B. dot net. 167 00:12:17,420 --> 00:12:23,450 That means we're gonna be working with a database called test and that is not what we had used before. 168 00:12:23,510 --> 00:12:29,420 If we want to pick a different name for the database I can just remove test setting up something like 169 00:12:29,450 --> 00:12:31,170 what we were using locally. 170 00:12:31,250 --> 00:12:34,960 So over inside of the local host database we had what did we have. 171 00:12:34,970 --> 00:12:35,600 It's right up here. 172 00:12:35,600 --> 00:12:39,330 Task Manager API so I'll use the same thing right here. 173 00:12:39,350 --> 00:12:46,610 Task Python manager Python API then we have a little query string which was added on setting something 174 00:12:46,670 --> 00:12:48,070 called retry right. 175 00:12:48,260 --> 00:12:49,110 True. 176 00:12:49,220 --> 00:12:53,960 That's just gonna make sure that if a right does fail it's attempted again until it works and that's 177 00:12:53,960 --> 00:12:55,700 exactly what we want. 178 00:12:55,790 --> 00:13:01,930 Now we can actually go ahead and run this command and to set the environment variable and we're gonna 179 00:13:01,970 --> 00:13:06,720 use clear to clear the terminal output and I'll use Heroku config. 180 00:13:06,800 --> 00:13:12,350 One more time just to make sure all three environment variables are showing up and they are. 181 00:13:12,350 --> 00:13:14,010 Which is fantastic. 182 00:13:14,090 --> 00:13:19,500 Now up above you'll notice that we have important to find but we have not defined a port down below. 183 00:13:19,610 --> 00:13:24,990 And once again that is because Port is maintained and managed by Heroku itself. 184 00:13:25,010 --> 00:13:29,520 It's not a custom environment variable that we would need to set. 185 00:13:29,600 --> 00:13:34,820 Now that we have this in place the only thing left to do is to push our code up to the server to do 186 00:13:34,820 --> 00:13:35,450 that. 187 00:13:35,450 --> 00:13:37,370 We'll use get push ups. 188 00:13:37,370 --> 00:13:38,960 I'm currently typing up here. 189 00:13:38,960 --> 00:13:45,200 Let's go ahead and not edit that file from the terminal get push her Roku master. 190 00:13:45,200 --> 00:13:50,000 Now the Heroku remote was set up for us when we ran Heroku create. 191 00:13:50,060 --> 00:13:55,760 So this is gonna get all of our code on the Heroku servers then Heroku is going to install all of those 192 00:13:55,760 --> 00:13:58,420 dependencies and get our app up and running. 193 00:13:58,550 --> 00:14:03,710 Now the first time this runs it'll take a little while just because it's the first time we're deploying 194 00:14:03,710 --> 00:14:10,460 the app so it actually has to go ahead and grab all of the NPM modules later on it'll be able to use 195 00:14:10,460 --> 00:14:16,730 ones in the cache and right here I can see that the process is almost complete and total it should take 196 00:14:16,730 --> 00:14:18,900 maybe 30 seconds to go through. 197 00:14:19,070 --> 00:14:24,830 Now if you do get any errors along the way and you open up a question in the course Q and A. 198 00:14:24,830 --> 00:14:31,340 Be sure to include as much information as possible copying and pasting the output from the terminal. 199 00:14:31,340 --> 00:14:37,790 Right here it looked like everything went well and we can see the are L where we can access our application. 200 00:14:37,850 --> 00:14:43,010 What I'm gonna do is take that entire U.R.L. and I am going to copy it to the clipboard. 201 00:14:43,100 --> 00:14:48,500 We're then going to head over to postmen and try to interact with the production version of our task 202 00:14:48,500 --> 00:14:49,760 manager API. 203 00:14:49,970 --> 00:14:53,470 Let's go ahead and move over to the postman app location. 204 00:14:53,480 --> 00:14:57,930 Now if you remember when we first set up postman we did create environments. 205 00:14:57,950 --> 00:15:03,260 I have task manager API in both dev and pride now for Dev. 206 00:15:03,260 --> 00:15:08,470 We set up the U.R.L. but for production we never had an actual value to provide. 207 00:15:08,500 --> 00:15:09,750 But now that's changed. 208 00:15:09,770 --> 00:15:13,100 So over here we'll click manage environments. 209 00:15:13,100 --> 00:15:18,950 We'll go over to the production environment and we'll set the current value for that you are El variable. 210 00:15:18,980 --> 00:15:21,430 We created much earlier in the class. 211 00:15:21,680 --> 00:15:24,590 So we have initial value and current value. 212 00:15:24,590 --> 00:15:29,420 Initial value is used when you are collaborating with teammates which is not something we're doing with 213 00:15:29,420 --> 00:15:30,360 postman. 214 00:15:30,500 --> 00:15:34,490 So we can just paste the U.R.L. right in current value. 215 00:15:34,490 --> 00:15:38,690 And the only thing we want to do is remove that trailing forward slash. 216 00:15:38,690 --> 00:15:42,490 We want to end with her Roku app dot com. 217 00:15:42,500 --> 00:15:49,070 Now if we click update and we closed down the manage environments mobile we can switch over to the production 218 00:15:49,070 --> 00:15:52,350 environment by clicking the dropdown and selecting it. 219 00:15:52,490 --> 00:15:57,070 Now from here we're actually running requests against our production instance. 220 00:15:57,170 --> 00:16:04,040 And if I fire off a read profile request what do I get I get please authenticate now it should have 221 00:16:04,040 --> 00:16:08,220 failed I haven't created a single user in the production database. 222 00:16:08,330 --> 00:16:09,710 So this is a good sign. 223 00:16:09,710 --> 00:16:15,050 It lets us know that our application is up and running and responding correctly. 224 00:16:15,050 --> 00:16:19,640 Now let's go ahead and actually create a user in the production environment. 225 00:16:19,640 --> 00:16:26,780 So I'm going to go over to create user from here I'll create Andrew 3 in the production setup I fire 226 00:16:26,780 --> 00:16:32,610 that off and down below I get a 2 0 1 and I have my user and their token showing up. 227 00:16:32,680 --> 00:16:39,200 Now let's go ahead and fire off read profile once again I should be logged in to the production server 228 00:16:39,410 --> 00:16:43,370 and right here I can get my data back which is fantastic. 229 00:16:43,460 --> 00:16:50,270 Now that we're able to read and write using our production API and the production database let's use 230 00:16:50,270 --> 00:16:56,310 Mongo DB compass to view the data in the database and make sure everything works there as well. 231 00:16:56,780 --> 00:17:04,010 So I'll navigate over to mongo DB compass and remember we have our local host favorite and our production 232 00:17:04,070 --> 00:17:04,960 favorite. 233 00:17:05,030 --> 00:17:11,470 We want to take a quick moment to connect to the production database down below. 234 00:17:11,500 --> 00:17:15,400 I'm going to connect and we should be able to view our single collection. 235 00:17:15,400 --> 00:17:17,670 Excuse me are single database. 236 00:17:17,740 --> 00:17:24,220 Right here we have our databases and we now have a task manager API showing up we can see we have our 237 00:17:24,220 --> 00:17:24,880 collection. 238 00:17:24,940 --> 00:17:30,910 So let's go ahead and click on the database to check out our users we have just a single document. 239 00:17:30,910 --> 00:17:37,270 And if I crack that open it is the exact data that we had just setup over inside of postmen. 240 00:17:37,300 --> 00:17:41,880 Now from here we could go ahead and do other things such as creating tasks. 241 00:17:41,890 --> 00:17:48,010 So back in postman I'll go over to create task and I'll go ahead and fire that off. 242 00:17:48,130 --> 00:17:52,900 Now in body I have description fourth and completed false. 243 00:17:53,050 --> 00:18:01,150 I'll go ahead and switch that up to something else something like store in production database I'll 244 00:18:01,150 --> 00:18:06,360 send that off and we'll make sure that it actually shows up in the production database. 245 00:18:06,400 --> 00:18:09,970 So once again navigating back over to the gooey. 246 00:18:09,970 --> 00:18:14,410 And from here we can head back to our database and we can see our collections. 247 00:18:14,440 --> 00:18:19,500 Now it's not showing up by default but if I do use command R it will refresh the data. 248 00:18:19,600 --> 00:18:26,080 We can now see our tasks showing up and I can click over there to view the brand new task that we just 249 00:18:26,080 --> 00:18:26,740 created. 250 00:18:27,070 --> 00:18:28,220 So there we go. 251 00:18:28,240 --> 00:18:34,900 We have a production database set up and we have our production application on Heroku with all of the 252 00:18:34,900 --> 00:18:42,040 environment variables configured allowing it to do things like generate those JWT secrets manage the 253 00:18:42,040 --> 00:18:48,260 production database and send emails when users create accounts or delete their accounts. 254 00:18:48,280 --> 00:18:54,700 So now that we have this in place we have a production version of our task manager API up and running 255 00:18:54,910 --> 00:18:58,660 and that's where we're going to stop for this section in this section. 256 00:18:58,660 --> 00:19:05,310 We started by focusing on email sending with postmark and we wrapped up with a production deployment. 257 00:19:05,320 --> 00:19:06,880 Now we're not quite done yet. 258 00:19:06,880 --> 00:19:12,850 There is still one more section for the task manager app in the next section. 259 00:19:12,850 --> 00:19:18,220 We're going to focus on how we can setup automated testing for our no J.S. code. 260 00:19:18,220 --> 00:19:23,010 So we'll learn how to write test cases for our code to test all sorts of things. 261 00:19:23,020 --> 00:19:26,650 I'm really excited to get to that topic because it is an important one. 262 00:19:26,980 --> 00:19:30,430 So let's jump right into the section introduction for that.