Scott and Wes talk with Topher Martini, a former Engineering Program Manager at Apple, about his extensive experience over two decades in the tech industry. Topher shares his journey at Apple, from starting as an intern in 2001 to working on groundbreaking products like iPhone, iPad, and Vision Pro. Show Notes (00:00) - Welcome to Syntax! (00:40) - What it was like working on the first iPhone (04:47) - How Topher landed at Apple early in his career (08:40) - How Apple's culture has changed over time (11:03) - What makes a great employee? (16:37) - Tips for better communication (17:54) - Are meetings a good means of communication? (20:05) - What makes a bad employee? (22:21) - What does it take to get hired at a company like Apple? (26:16) - Brought to you by Sentry.io (26:55) - The relationship between passion and career (29:08) - Topher's advice for growing in your career (31:50) - What is a sabbatical? (33:36) - Teaching tech to kids (35:49) - Topher's work on self-driving cars (39:33) - AI's impact on tech and the future (41:22) - What can developers do to stand out and be relevant in a world of AI? (43:30) - Topher's thoughts on career development (44:47) - What is a light field camera? (46:47) - Spatial media and Vision Pro (48:10) - The nifty stuff in Topher's background (49:53) - Something wild that happened while Topher was at Apple (51:34) - Sick Picks & Shameless Plugs All links available at https://syntax.fm/827 ------------------------------------------------------------------------------ Hit us up on Socials! Scott: https://twitter.com/stolinski Wes: https://twitter.com/wesbos Randy: https://www.youtube.com/@randyrektor Syntax: https://twitter.com/syntaxfm http://www.syntax.fm Brought to you by Sentry.io #webdevelopment #webdeveloper #javascript
In this video, CJ builds a Full Stack application with Nuxt / Vue / TypeScript that allows users to keep track of the places they have visited and view them on a map. View the LIVE App | https://nuxt-travel-log.vercel.app/ View the Code | https://github.com/w3cj/nuxt-travel-log Project Board Creator Tool | https://github.com/w3cj/travel-log-github-project-creator Example Project Board with Issues | https://github.com/users/w3cj/projects/11/views/1 Links / Resources | https://gist.github.com/w3cj/3d331e23c17df1dbeaa55342f230f3ee 00:00 intro / overview 07:27 stack / architecture overview 12:18 github project board setup 15:50 project setup 17:52 github auto deploy with vercel 19:21 eslint / editor setup 19:37 nuxt eslint plugin 21:10 antfu eslint-config 25:57 pre-commit hooks lint 30:30 git feature branch worflow 32:12 lint github action 38:48 tailwind setup 41:25 daisy ui setup 44:38 nuxt/icon setup 49:25 landing page 57:44 theme toggle / color mode 01:05:14 typesafe env with zod 01:11:54 db setup 01:13:21 drizzle setup 01:18:00 turso local development 01:22:25 db schema 01:27:45 export tables from schema 01:28:10 migrating local database 01:29:07 add ignores to eslint 01:29:42 set environment variables on vercel and github actions 01:31:46 auth setup with better-auth 01:40:00 github oauth setup 01:47:56 create auth store with pinia 01:52:31 auth error page 01:56:31 github oauth production configuration 01:58:08 turso cloud setup 01:58:53 run db migrations on production 02:01:24 auth status display 02:08:02 sign out page 02:12:48 protected routes redirect 02:16:25 SSR Auth Session 02:25:41 create dashboard sidebar 02:36:38 collapsible sidebar 02:47:16 persist sidebar collapse in localStorage 02:50:05 dashboard nested routes 02:52:05 create location form 02:57:20 validate form with vee-validate 02:58:53 drizzle zod validation schema 03:03:35 handle location form submit / show validation errors 03:07:59 re-factor form field component 03:09:54 eslint rule auto wrap vue template attributes 03:11:51 re-factor form field component 03:14:53 show confirmation if unsaved changes in form 03:18:01 create location API route 03:19:21 validate location before insert 03:21:14 display server errors on form 03:30:06 loading state during create location 03:33:11 insert location into db 03:34:19 access logged in user in API route 03:37:59 insert location into db with userId 03:39:08 redirect after creating new location 03:41:12 csrf protection 03:46:54 validate unique location slug and name 03:50:22 generating slug during location insert 03:57:19 unique location name per user database constraint 03:59:35 oops - reset entire db / migrations 04:01:41 show unique location name error 04:04:10 consolidate location table db queries 04:12:23 show form errors in production 04:13:29 list locations in dashboard 04:16:41 create authenticated event handler util 04:22:46 list locations API route 04:24:17 list locations in dashboard 04:34:21 list locations in sidebar 04:52:06 map setup 04:54:50 set up nuxt-maplibre 04:59:39 map styles setup 05:05:55 list locations on map 05:17:09 center map on location bounds 05:29:53 map popups 05:32:48 override maplibre popup styles 05:37:20 set selected location on hover 05:48:22 zoom to map point on hover 05:56:27 drag marker to set location coordinates 06:10:15 center map on draggable marker 06:15:15 double click map to set location 06:20:30 places search api options 06:24:25 place search 06:25:31 view location page 06:29:59 typecheck npm script 06:31:45 view location page continued 06:41:25 location logs relation / query 06:41:27 list place search results 06:46:59 view location by map marker 06:59:19 location specific sidebar links 07:05:17 refactor current location into store 07:11:54 location specific sidebar continued 07:19:20 update location details form 07:36:17 fix current location SSR 07:39:11 update location details form continued 07:42:39 fixing data loading issues 07:47:31 update location details form continued 07:48:46 update location details api 08:02:28 delete locations 08:12:45 delete location api 08:18:35 create location log form 08:47:38 create location log api 08:55:03 list location logs 09:08:03 list location logs in sidebar and on map 09:16:49 view location log 09:30:29 edit location log 09:41:45 delete location log 09:48:19 minio local s3 storage setup 10:00:52 s3 image upload flows 10:04:38 select upload image 10:12:07 resize / optimize image on client 10:17:20 create image checksum on client 10:19:23 create pre-signed post url on server 10:32:25 get pre-signed post url on client 10:38:40 upload image to s3 from client 10:41:59 insert image metadata into db 10:52:54 list images 11:08:14 s3 production setup 11:14:59 delete images 11:25:33 final fixes 11:35:19 nuxt sentry setup 11:39:41 final deployment 11:40:30 thanks! View the place search API hidden chapter here: https://www.youtube.com/watch?v=M2iT6DuITLI Brought to you by Sentry.io