Этот материал находится в платной подписке. Оформи премиум подписку и смотри или слушай The Road to Next, а также все другие курсы, прямо сейчас!
Премиум
  • Урок 1. 00:06:56
    Welcome to The Road to Next
  • Урок 2. 00:01:33
    Software to create Software
  • Урок 3. 00:02:32
    Visual Studio Code (VSCode)
  • Урок 4. 00:01:44
    External Terminal (Optional)
  • Урок 5. 00:02:26
    Browser
  • Урок 6. 00:02:53
    Node
  • Урок 7. 00:02:02
    NPM
  • Урок 8. 00:09:38
    Manual setup in Next
  • Урок 9. 00:02:34
    JSX
  • Урок 10. 00:03:22
    Components
  • Урок 11. 00:03:07
    Props
  • Урок 12. 00:01:14
    Styling
  • Урок 13. 00:02:28
    Interactions
  • Урок 14. 00:03:01
    State
  • Урок 15. 00:03:34
    Composition
  • Урок 16. 00:01:07
    File Extraction
  • Урок 17. 00:01:48
    Outro
  • Урок 18. 00:01:21
    What are pitfalls?
  • Урок 19. 00:02:22
    Restarting Things
  • Урок 20. 00:01:49
    Wrong (Auto) Imports
  • Урок 21. 00:02:13
    npm install --force
  • Урок 22. 00:02:05
    Breaking Changes
  • Урок 23. 00:06:59
    create-next-app
  • Урок 24. 00:02:53
    Next 15 & React 19
  • Урок 25. 00:06:54
    Exploring the Starter
  • Урок 26. 00:05:55
    Git & GitHub
  • Урок 27. 00:04:18
    Deploy
  • Урок 28. 00:09:30
    Exploring the finished Project
  • Урок 29. 00:04:22
    Script
  • Урок 30. 00:03:05
    Import Sort
  • Урок 31. 00:05:01
    Pages
  • Урок 32. 00:05:06
    Static and Dynamic Routes [B]
  • Урок 33. 00:07:07
    Link Components
  • Урок 34. 00:00:48
    Absolute Imports
  • Урок 35. 00:02:08
    Path Constants
  • Урок 36. 00:05:21
    Layout
  • Урок 37. 00:02:22
    Script
  • Урок 38. 00:04:06
    const Assertions
  • Урок 39. 00:04:45
    Tailwind CSS [C]
  • Урок 40. 00:08:26
    Tailwind CSS in Next
  • Урок 41. 00:01:50
    Conditional Style
  • Урок 42. 00:02:30
    Animations with Tailwind
  • Урок 43. 00:02:15
    SVGs
  • Урок 44. 00:06:05
    Setup [B]
  • Урок 45. 00:04:40
    Button
  • Урок 46. 00:06:25
    Card
  • Урок 47. 00:02:14
    Separator
  • Урок 48. 00:05:17
    Icons [C]
  • Урок 49. 00:02:22
    Theming
  • Урок 50. 00:04:34
    Heading
  • Урок 51. 00:02:23
    Header
  • Урок 52. 00:09:43
    Placeholder
  • Урок 53. 00:01:48
    Intro [B]
  • Урок 54. 00:04:35
    Extract
  • Урок 55. 00:04:26
    Modify
  • Урок 56. 00:05:00
    Reuse
  • Урок 57. 00:03:52
    Recap
  • Урок 58. 00:13:16
    Implementation
  • Урок 59. 00:09:45
    Data Fetching in Client Components
  • Урок 60. 00:02:17
    Characteristics of Client Components
  • Урок 61. 00:05:04
    Client-Server Boundary [C]
  • Урок 62. 00:04:00
    Client-Server Composition
  • Урок 63. 00:06:18
    Data Fetching in Server Components
  • Урок 64. 00:02:41
    SSR vs Server Components
  • Урок 65. 00:04:11
    Server-Side Rendering
  • Урок 66. 00:03:41
    Streaming
  • Урок 67. 00:02:50
    Suspense
  • Урок 68. 00:00:54
    Introduction
  • Урок 69. 00:03:21
    Loading Route
  • Урок 70. 00:03:34
    Error Route
  • Урок 71. 00:02:56
    Error Boundary (Optional)
  • Урок 72. 00:02:00
    Not Found Route
  • Урок 73. 00:03:11
    Nearest Boundary Bubbling
  • Урок 74. 00:07:22
    Connect to Database
  • Урок 75. 00:01:30
    Prisma
  • Урок 76. 00:09:29
    Prisma Schema
  • Урок 77. 00:07:31
    Seeding the Database
  • Урок 78. 00:01:54
    Prisma Studio
  • Урок 79. 00:02:21
    Prisma Client
  • Урок 80. 00:06:03
    Database Queries
  • Урок 81. 00:01:52
    ORM generated Types
  • Урок 82. 00:04:40
    Typed APIs (Optional)
  • Урок 83. 00:08:58
    Server Actions in Client Components
  • Урок 84. 00:04:03
    Server Actions in Server Components
  • Урок 85. 00:01:14
    redirect
  • Урок 86. 00:01:38
    Development vs Production
  • Урок 87. 00:05:36
    Router Cache
  • Урок 88. 00:01:41
    Full Route Cache
  • Урок 89. 00:06:59
    Static vs Dynamic Rendering
  • Урок 90. 00:02:45
    Time-Based Cache (ISR)
  • Урок 91. 00:02:56
    On-Demand Caching (ISR)
  • Урок 92. 00:01:02
    Where do we cache?
  • Урок 93. 00:05:46
    Request Memoization
  • Урок 94. 00:03:19
    Generate Static Params (Optional)
  • Урок 95. 00:02:19
    Recap
  • Урок 96. 00:12:13
    Create Form
  • Урок 97. 00:03:46
    Configuration over Composition (Software Craftsmanship)
  • Урок 98. 00:13:05
    Edit Form [B]
  • Урок 99. 00:08:17
    DRY with Abstractions (Software Craftsmanship)
  • Урок 100. 00:02:50
    Progressive Enhancement
  • Урок 101. 00:03:34
    useTransition
  • Урок 102. 00:04:24
    useFormStatus
  • Урок 103. 00:03:34
    useActionState
  • Урок 104. 00:06:10
    Form Validation
  • Урок 105. 00:03:27
    Form Reset
  • Урок 106. 00:06:41
    Error Handling
  • Урок 107. 00:07:29
    Field Errors in Forms
  • Урок 108. 00:07:31
    Premature Optimization (Software Craftsmanship)
  • Урок 109. 00:12:50
    Action Callbacks
  • Урок 110. 00:07:58
    Debugging (Software Craftsmanship)
  • Урок 111. 00:05:58
    Toast Feedback
  • Урок 112. 00:04:55
    Form Abstraction
  • Урок 113. 00:05:12
    Cookie API [B]
  • Урок 114. 00:02:19
    Set Cookie [B]
  • Урок 115. 00:09:58
    Read Cookie [B]
  • Урок 116. 00:04:59
    Pages vs Layouts
  • Урок 117. 00:05:15
    Layouts vs Templates
  • Урок 118. 00:05:48
    Schema Changes
  • Урок 119. 00:10:39
    Working with Currencies (Bonus)
  • Урок 120. 00:10:07
    Working with Dates (Bonus)
  • Урок 121. 00:03:47
    Close DatePicker (Controlled Component)
  • Урок 122. 00:04:25
    Reset DatePicker (key)
  • Урок 123. 00:03:22
    Exposing Callback Handlers
  • Урок 124. 00:04:56
    Reset DatePicker (useImperativeHandle)
  • Урок 125. 00:06:23
    Dropdown Component
  • Урок 126. 00:04:21
    Ticket Status (Read)
  • Урок 127. 00:06:31
    Ticket Status (Write)
  • Урок 128. 00:02:20
    Update Toast Feedback
  • Урок 129. 00:07:32
    Confirm Dialog
  • Урок 130. 00:07:53
    Confirm Dialog from Dropdown (Advanced)
  • Урок 131. 00:06:42
    Delete Toast Feedback
  • Урок 132. 00:04:39
    Development vs Production
  • Урок 133. 00:04:18
    Vercel
  • Урок 134. 00:02:57
    Environment Variables
  • Урок 135. 00:03:37
    Other Environment Variables
  • Урок 136. 00:07:30
    Lucia [B]
  • Урок 137. 00:01:42
    Paths for Authentication
  • Урок 138. 00:12:07
    Sign Up
  • Урок 139. 00:06:22
    Sign In
  • Урок 140. 00:04:01
    Regression Bugs (Software Craftsmanship)
  • Урок 141. 00:06:02
    Authentication Status
  • Урок 142. 00:09:23
    Sign Out
  • Урок 143. 00:04:42
    Header (Server Component)
  • Урок 144. 00:03:08
    Header (Client Component)
  • Урок 145. 00:06:50
    The Authentication Flicker
  • Урок 146. 00:09:25
    One-to-Many Relation
  • Урок 147. 00:02:37
    Referential Actions
  • Урок 148. 00:03:15
    Non-Nullable Relation
  • Урок 149. 00:02:21
    Relation Queries
  • Урок 150. 00:03:12
    Exclude Sensitive Information
  • Урок 151. 00:08:05
    Protected Routes
  • Урок 152. 00:05:36
    Ownership
  • Урок 153. 00:08:16
    Protected APIs
  • Урок 154. 00:02:20
    Protected UI
  • Урок 155. 00:04:34
    All Tickets vs My Tickets
  • Урок 156. 00:09:52
    Sidebar
  • Урок 157. 00:03:52
    Authenticated Sidebar
  • Урок 158. 00:06:11
    Breadcrumbs
  • Урок 159. 00:07:40
    Tabs
  • Урок 160. 00:08:34
    Active Path (Fastest Levenshtein)
  • Урок 161. 00:04:34
    Account Dropdown
  • Урок 162. 00:03:09
    Route Groups
  • Урок 163. 00:05:33
    Private Folders
  • Урок 164. 00:07:41
    useSearchParams
  • Урок 165. 00:05:32
    searchParams [B]
  • Урок 166. 00:01:55
    Debounce Requests
  • Урок 167. 00:10:51
    Sort
  • Урок 168. 00:08:05
    Typed Search Params [B]
  • Урок 169. 00:09:53
    useQueryState
  • Урок 170. 00:06:41
    useQueryStates
  • Урок 171. 00:02:29
    Composite Key
  • Урок 172. 00:06:19
    Mediator Components
  • Урок 173. 00:10:50
    URL State
  • Урок 174. 00:03:55
    Offset-Based Pagination
  • Урок 175. 00:07:30
    Metadata in Pagination with Prop Drilling
  • Урок 176. 00:02:09
    Database Transactions
  • Урок 177. 00:06:13
    Interplay between Interactions (UX)
  • Урок 178. 00:03:24
    Dynamic Page Size
  • Урок 179. 00:05:36
    Route Handler
  • Урок 180. 00:03:40
    Route Params in Route Handler [B]
  • Урок 181. 00:05:43
    Search Params in Route Handler
  • Урок 182. 00:01:38
    Intro (with Challenge)
  • Урок 183. 00:06:25
    Many-to-One Relation
  • Урок 184. 00:10:53
    Read Comments
  • Урок 185. 00:11:24
    Create Comment
  • Урок 186. 00:14:42
    Delete Comment
  • Урок 187. 00:08:06
    Sequential Data Fetching
  • Урок 188. 00:06:14
    Parallel Data Fetching
  • Урок 189. 00:10:36
    Explicit Client Components
  • Урок 190. 00:06:25
    Implicit Client Components
  • Урок 191. 00:03:01
    Hydration Mismatch
  • Урок 192. 00:02:29
    Async Client Components
  • Урок 193. 00:01:33
    Client-Server Boundary
  • Урок 194. 00:08:31
    Client-Server Composition
  • Урок 195. 00:04:45
    “use client”;
  • Урок 196. 00:03:16
    “use server”;
  • Урок 197. 00:06:50
    Continuous Offset-Based Pagination
  • Урок 198. 00:02:35
    Initial State
  • Урок 199. 00:02:59
    Sliding Window
  • Урок 200. 00:06:03
    Client-Side State: Remove Comment
  • Урок 201. 00:10:08
    Client-Side State: Add Comment
  • Урок 202. 00:02:45
    TypeScript Generics (Bonus)
  • Урок 203. 00:09:09
    Delete Feedback (Toast)
  • Урок 204. 00:04:34
    Delete Feedback (Button)
  • Урок 205. 00:05:58
    Cursor-Based Pagination (Timestamp)
  • Урок 206. 00:04:00
    Cursor-Based Pagination (Unique ID)
  • Урок 207. 00:03:53
    Deliberate Over-Fetching
  • Урок 208. 00:04:42
    TypeScript Generics (Bonus)
  • Урок 209. 00:05:05
    React Query Provider
  • Урок 210. 00:07:47
    useInfiniteQuery
  • Урок 211. 00:05:36
    initialData
  • Урок 212. 00:03:19
    Refetch (Option 1)
  • Урок 213. 00:02:15
    Invalidate Query (Option 2)
  • Урок 214. 00:04:50
    Infinite Scroll
  • Урок 215. 00:09:53
    Custom Domain
  • Урок 216. 00:04:39
    001 - The Plan
  • Урок 217. 00:06:43
    002 - Forgot Password (Public Page)
  • Урок 218. 00:02:49
    003 - Password Reset Token
  • Урок 219. 00:09:12
    004 - Password Reset Link
  • Урок 220. 00:10:00
    005 - Reset Password (Public Page)
  • Урок 221. 00:04:53
    006 - Reset Password (Public Page)
  • Урок 222. 00:08:26
    007 - Change Password (Protected Page)
  • Урок 223. 00:03:30
    008 - Many vs One Password Reset Token (Discussion)
  • Урок 224. 00:06:23
    009 - Render Emails
  • Урок 225. 00:03:34
    010 - Preview Emails
  • Урок 226. 00:03:44
    011 - Resend
  • Урок 227. 00:05:19
    012 - Custom Email Domain
  • Урок 228. 00:05:48
    013 - Send Emails
  • Урок 229. 00:02:16
    014 - Resend Dashboard
  • Урок 230. 00:03:25
    015 - Why a Queue_
  • Урок 231. 00:03:40
    016 - Inngest
  • Урок 232. 00:05:23
    017 - Receive Events with Functions
  • Урок 233. 00:04:58
    018 - Send Events
  • Урок 234. 00:02:13
    019 - Recap
  • Урок 235. 00:02:25
    020 - Type-Safe Events
  • Урок 236. 00:05:39
    021 - Retries
  • Урок 237. 00:03:24
    022 - Inngest + Vercel (Integration)
  • Урок 238. 00:00:36
    023 - Explore Inngest
  • Урок 239. 00:03:18
    024 - Is Verified Email
  • Урок 240. 00:02:04
    025 - Redirect if not Verified
  • Урок 241. 00:02:33
    026 - Email Verification Token
  • Урок 242. 00:01:30
    027 - Generate Random Code
  • Урок 243. 00:04:24
    028 - Email Verification Code
  • Урок 244. 00:04:26
    029 - Verify Email with Code
  • Урок 245. 00:04:56
    030 - Verify Email with Code
  • Урок 246. 00:06:03
    031 - Verify Email with Code
  • Урок 247. 00:07:42
    032 - Fine-Grained Authorization
  • Урок 248. 00:05:20
    033 - Send Email Verification
  • Урок 249. 00:05:41
    034 - Queue Email Verification
  • Урок 250. 00:06:54
    035 - Resend Verification Email
  • Урок 251. 00:08:38
    036 - Many-to-Many, Users-to-Organizations
  • Урок 252. 00:06:30
    037 - Read Organizations
  • Урок 253. 00:02:52
    038 - Never Trust the Client, Trust the Server
  • Урок 254. 00:03:42
    039 - Do not Over-Fetch ...
  • Урок 255. 00:02:11
    040 - ... but keep the information you need
  • Урок 256. 00:02:09
    041 - Redirect if no Organization ...
  • Урок 257. 00:05:17
    042 - ... but do not introduce Regression Bugs (Software Craftsmanship)
  • Урок 258. 00:05:16
    043 - Require Organization during Onboarding
  • Урок 259. 00:05:41
    044 - Create More Organization
  • Урок 260. 00:04:18
    045 - Manage Organization
  • Урок 261. 00:08:07
    046 - One-Way Relation and Referential Integrity
  • Урок 262. 00:13:16
    047 - Switch Organization (Idempotent Operation) [C]
  • Урок 263. 00:02:22
    048 - Switch Organization (Idempotent Operation) [C]
  • Урок 264. 00:03:22
    049 - Investigating (Software Craftsmanship)
  • Урок 265. 00:02:46
    050 - Compound Key
  • Урок 266. 00:05:01
    051 - Require Default Organization
  • Урок 267. 00:05:58
    052 - Require Default Organization
  • Урок 268. 00:08:09
    053 - Require Default Organization
  • Урок 269. 00:05:51
    054 - Impossible States (Interactive Transactions)
  • Урок 270. 00:09:14
    055 - Delete Organization
  • Урок 271. 00:03:33
    056 - Client-Side Refresh
  • Урок 272. 00:03:18
    057 - Limited Access
  • Урок 273. 00:08:32
    058 - Read Memberships
  • Урок 274. 00:08:42
    059 - Delete Membership
  • Урок 275. 00:02:40
    060 - Leave Organization
  • Урок 276. 00:02:56
    061 - Database Schema
  • Урок 277. 00:09:00
    062 - Protected Admin Routes
  • Урок 278. 00:03:51
    063 - Protected Admin UI
  • Урок 279. 00:03:25
    064 - Protected Admin API
  • Урок 280. 00:11:29
    065 - Protected Admin API
  • Урок 281. 00:08:21
    066 - Change Role
  • Урок 282. 00:03:00
    067 - Actual Use Case Tickets belong to Organizations
  • Урок 283. 00:06:36
    068 - Create Ticket in Organization
  • Урок 284. 00:10:16
    069 - Read Tickets by Organization
  • Урок 285. 00:08:56
    070 - Manage Permissions
  • Урок 286. 00:07:54
    071 - Authorize based on Permission (1)
  • Урок 287. 00:09:49
    072 - Authorize based on Permission (2)
  • Урок 288. 00:01:38
    073 - Do not trust the UI
  • Урок 289. 00:03:23
    074 - Database Model
  • Урок 290. 00:01:16
    075 - Unique Constraints
  • Урок 291. 00:06:35
    076 - Read Invitations
  • Урок 292. 00:05:30
    077 - Read Invitations
  • Урок 293. 00:07:20
    078 - Invite by Email
  • Урок 294. 00:06:00
    079 - Invitation Token & Link
  • Урок 295. 00:03:19
    080 - Invitation Email
  • Урок 296. 00:03:43
    081 - Queue Invitation
  • Урок 297. 00:02:04
    082 - Queue and Send Invitation
  • Урок 298. 00:03:45
    083 - Accept Invitation Strategies
  • Урок 299. 00:06:57
    084 - Accept Invitation as User
  • Урок 300. 00:09:38
    085 - Accept Invitation as Anonymous [C]
  • Урок 301. 00:06:53
    086 - Revoke Invitation
  • Урок 302. 00:04:13
    087 - Amazon AWS S3
  • Урок 303. 00:05:26
    088 - Amazon AWS IAM
  • Урок 304. 00:03:06
    089 - AWS SDK for JavaScript
  • Урок 305. 00:05:07
    090 - Tickets with Attachments
  • Урок 306. 00:06:37
    091 - Upload Files
  • Урок 307. 00:04:59
    092 - File Validation
  • Урок 308. 00:06:27
    093 - Store Files in Amazon S3
  • Урок 309. 00:02:17
    094 - List Attachments
  • Урок 310. 00:05:22
    095 - Delete Attachments from Database
  • Урок 311. 00:05:01
    096 - Delete Files from Amazon S3
  • Урок 312. 00:03:23
    097 - Synchronize AWS S3 with Database
  • Урок 313. 00:09:13
    098 - Download Files with Presigned URLs
  • Урок 314. 00:03:17
    099 - From Files to Folders
  • Урок 315. 00:05:13
    100 - Custom Hook Extraction
  • Урок 316. 00:02:27
    101 - Variable Extraction
  • Урок 317. 00:02:58
    102 - Component Extraction
  • Урок 318. 00:06:14
    103 - Render Prop Component
  • Урок 319. 00:04:43
    104 - Polymorphic Relationship
  • Урок 320. 00:05:11
    105 - Read Polymorphic Relations
  • Урок 321. 00:10:35
    106 - Create a Polymorphic Relation
  • Урок 322. 00:03:55
    107 - Type Guards in TypeScript
  • Урок 323. 00:01:32
    108 - Helper Functions
  • Урок 324. 00:07:13
    109 - Delete a Polymorphic Relation
  • Урок 325. 00:04:30
    110 - Sign a Polymorphic Relation
  • Урок 326. 00:02:30
    111 - Intro (Challenge)
  • Урок 327. 00:09:09
    112 - Polymorphic Comments
  • Урок 328. 00:02:52
    113 - Limits of the Client-Server Boundary (Discussion)
  • Урок 329. 00:02:32
    114 - N+1 Problem (Discussion)
  • Урок 330. 00:06:53
    115 - Nested Fetch
  • Урок 331. 00:05:07
    116 - Invalidate Client-Side Cache
  • Урок 332. 00:04:23
    117 - Isomorphic Components (Discussion)
  • Урок 333. 00:04:30
    118 - Use Case for Layer(s)
  • Урок 334. 00:03:35
    119 - Service Layer
  • Урок 335. 00:01:59
    120 - Descriptive Layers
  • Урок 336. 00:03:02
    121 - The Case for Barrel Files
  • Урок 337. 00:05:12
    122 - Error Handling across Layers
  • Урок 338. 00:02:19
    123 - Reuse Schema
  • Урок 339. 00:04:23
    124 - Reuse Service
  • Урок 340. 00:03:31
    125 - Service Layer to Data Layer
  • Урок 341. 00:03:10
    126 - API Layer to Data Layer
  • Урок 342. 00:04:00
    127 - Dynamic Include Statement
  • Урок 343. 00:08:30
    128 - Function Overloads (Discussion)
  • Урок 344. 00:01:40
    129 - Why DTOs
  • Урок 345. 00:03:27
    130 - Implement DTO
  • Урок 346. 00:02:45
    131 - Usage DTO (Create Attachments)
  • Урок 347. 00:02:29
    132 - Usage DTO (Delete Attachment)
  • Урок 348. 00:03:05
    133 - Usage DTO (Sign Attachment)
  • Урок 349. 00:03:21
    134 - Usage DTO (Create Comment)
  • Урок 350. 00:01:23
    135 - Ticket-to-Ticket Relations
  • Урок 351. 00:03:42
    136 - List Ticket References
  • Урок 352. 00:06:08
    137 - Connect Ticket Reference
  • Урок 353. 00:05:46
    138 - Disconnect Ticket Reference
  • Урок 354. 00:05:30
    139 - Embed Ticket Reference by ID
  • Урок 355. 00:03:46
    140 - Organization-Level Creadentials
  • Урок 356. 00:06:03
    141 - Create Credential
  • Урок 357. 00:03:16
    142 - Show Once, Copy Secret
  • Урок 358. 00:03:19
    143 - Obfuscate Secrets
  • Урок 359. 00:02:13
    144 - Protected API
  • Урок 360. 00:07:45
    145 - Bearer Authorization
  • Урок 361. 00:03:20
    146 - Exclude Sensitive Information (Discussion)
  • Урок 362. 00:06:33
    147 - Timing Attack
  • Урок 363. 00:02:30
    148 - Enumeration Attack
  • Урок 364. 00:04:36
    149 - Throttling Token Generation
  • Урок 365. 00:03:52
    150 - Client-Side Guardrails Preventing UI-Level Misuse
  • Урок 366. 00:03:45
    151 - Server-Side Guardrails Stricter Validation
  • Урок 367. 00:02:52
    152 - Injection & Sanitization (Discussion)