Hi, I'm Patty!

Full stack web developer. Experienced problem solver. Fascinated with code.

A photo of Patrick in a suit & tie smiling at the camera

Patrick Bryan

I'm a full stack web developer gaining new skills and building cool stuff every single day in Portland, OR.

Hey there, I'm Patrick, and I thrive on unraveling challenges through code.

Not long ago, I was labeled an accountant. And yes, it was as tedious as you might imagine. Amidst the monotony, occasional sparks ignited my interest—dabbling in system implementations or orchestrating process improvements with software tools brought me genuine joy. Yet, the routine of closing monthly books began to feel like a (really boring) cage.

It took longer than I'd care to admit, but the epiphanies eventually came, and they struck hard. Firstly, my talents lie in unraveling logic and maneuvering through complex processes, not in mailing tax forms. Secondly, solving problems with data and software has always been the common thread through all the bright spots in my career. Lastly, I grasped a vital truth: change is possible if I'm willing to pursue it.

That realization spurred action. The final journal entry of 2022 marked the beginning of a dedicated pursuit. Since then, every moment has been committed to mastering web development.

I love setting up databases, crafting business logic, obsessing over styling, and everything in between—the entire spectrum gets me going. Whether it's mastering some new tool, refining code cleanliness, or whipping the bundle size into shape, each step forward fuels my enthusiasm.

While I have gained so much knowledge over this past year, I know that it's only the very beginning of my education. It's time to accelerate my learning and growth. As such, I am seeking an opportunity to surround myself with seasoned developers in an environment that challenges my current boundaries as I contribute to delivering innovations, elevating performance, and championing accessibility.

Let's dive into problem-solving together. If you're in need of a swift-learning, inquisitive, self-driven developer (or you simply want to make my day by saying hello), drop me a line below. Let's make cool stuff together.

Recent Work

Plants&Co

Roughly halfway through my time studying at Fullstack Academy, I collaborated with a team of three peers to develop Plants&Co, a comprehensive e-commerce application. Serving as a pivotal milestone in my learning journey, this project helps to highlight the considerable growth and expertise I've gained in the time since its completion, while I still maintain a sense of pride in its functionality and design.

My team and I implemented essential user functionalities such as user accounts, a persistent shopping cart accessible both for logged-in users and guests, and a favorites system to enhance the user experience. Additionally, we constructed an extensive admin section within the app, empowering administrators to efficiently manage products, categories, and other crucial aspects of the storefront.

Despite subsequently developing a preference for different tools, my work on Plants&Co exposed me to important and widely-used technologies that contribute significantly to my skill set. Notably, this initial exposure to Redux/RTK for state management and authorization/authentication using JWTs serves as a strong foundation that I have expanded upon in every project since.

Moreover, this project afforded me invaluable experience in server deployment and configuration, particularly with nginx on a no-frills, do-it-yourself Linux host. This type of hands-on experience continues to be an area I actively engage in and derive satisfaction from despite the availability of instant-deploy services that hide away all the "fun" parts like wrangling environment variables, docker networking, and reverse proxy configurations.

While I've adopted newer tools and methodologies since completing this project, Plants&Co remains a testament to my adaptability, perseverance, and continuous quest for refining my craft in the ever-evolving landscape of web development. Also it's helpful to look back on this project to see how far I've come since. I've been told that if we look back on old code without at least a little embarrassment it means we've stopped growing. Good news, still growing!!

ReactReduxTailwindCSSFramer MotionExpressJSPostgreSQLSequelizeJWTStripenginxNodeJSViteDocker

LunchBuddy

As the final capstone project during my time at Fullstack Academy, I spearheaded a 4-person team in developing LunchBuddy: a Geolocation API-driven app aimed at fostering connections among individuals looking to broaden their social and professional circles.

Leveraging the user's physical location, LunchBuddy seamlessly connects users within a configurable radius, facilitating meetups for otherwise-solo diners. Integrating Yelp's API, we curated restaurant suggestions based on shared dining preferences, visualized on a Google Map centered on the user's location.

To keep the nice people behind Yelp's API from getting too annoyed with us, we strategically stored restaurant data in our own database, ensuring reliable and rapid access in future lookups while minimizing third-party requests.

Also, given the high priority we placed on efficient negotiation between users, I developed a live notification system supported by a Socket.IO-based chat to keep matches in contact with one another. For enhanced safety, the chat feature is only available leading up to scheduled meetups.

On this point, LunchBuddy prioritized user comfort by implementing post-meetup feedback mechanisms. This data, coupled with profile overlap, empowered us to rank future search results, ensuring top-ranked and well-regarded lunch partners are listed ahead of others on subsequent searches, enhancing the overall user experience.

This project challenged me to take a leading role on a multifaceted team in crafting innovative solutions that combine geolocation services, third-party API integrations, and real-time communication for a secure and efficient networking experience.

ReactExpressJSNodeJSReduxPostgreSQLSocketIOSequelizenginxJWTViteTailwindCSS

Astoria Skincare

Astoria stands as a collaborative venture, expanding upon my e-commerce app experience with added complexities and improved patterns, building upon the foundation laid by previous projects.

This project marks my introduction into TypeScript—a journey that, despite the occasional tight spot I get into every now and then, swiftly established my preference for the huge advantage that type safety brings to the language. Defining and relying on precise type structures has become a cornerstone, particularly when navigating deeply nested document structures within Mongo/Mongoose.

Venturing into MongoDB for the first time in this project marked a departure from my familiarity with SQL databases. While it initially challenged ingrained normalization practices shaped through years of writing SQL, the convenience and performance gains achieved through consolidating related information within documents became increasingly evident over the course of the project.

Additionally, this project introduced me to two indispensable tools: Zod and react-hook-form. Don't get me wrong, I'm glad that I had the experience of writing manually-validated "standard" controlled forms. But that experience gives me the perspective to say that these tools are truly transformative. Zod's schema validation, coupled with seamless integration into react-hook-form, significantly enhanced form handling, swiftly becoming fundamental elements in my toolkit. Their one-two punch revolutionizes React form development, easing what is often considered one of the more challenging aspects of web development—second only to naming stuff.

Astoria Skincare not only expanded my technical skill set but also served as the platform for embracing new methodologies and tools. These tools have now become integral components in my development toolbox, enriching my approach to future projects.

TypeScriptReactReduxZodTailwindCSSGSAPFramer MotionExpressJSMongooseMongoDBPassportJSJWTStripenginxNodeJSViteDocker

Recipes

Ok so the marketing team is still hashing out the branding, but this solo project stands as my most recent endeavor, a functional work-in-progress aiming to overhaul my recipe management system. Mired in half a dozen tattered binders of printed, scribbled, and stained recipes accumulated over the years, this project serves as a solution to organize and digitize this chaotic collection.

Initially eyeing a component library for simplicity, I quickly pivoted to create custom UI components. In the pursuit of complexity, I ventured beyond standard UI elements, developing state-aware nested menus, tag pickers, modals, intricate search and filter functionalities, and animated-height accordions. While I know I could've pulled these components from one of a hundred different libraries and finished the project much more quickly, I take pride in these more intricate UI solutions I've crafted and especially the earned component design lessons they represent.

UI widgets aside, this project served as a gateway to discovering invaluable tools, most notably tRPC (and its counterpart, TanStack Query, formerly known as React Query). Embracing this toolset—tRPC, Zod, react-hook-form, Prisma, and TypeScript—proved transformative. The robustness of cohesive validation logic between client and server, coupled with type-guarded tRPC mutations, takes much of the frustration and uncertainty out of the development process. Seriously, I'm a fan...ask me about tRPC at your own risk.

Finally, those efficiencies and DX improvements enabled me to dig deeper than I had previously on state management. Most of my previous projects utilized Redux/RTK, which I maintain is a great tool, but given the tech stack on this project I discovered that React's own Context API was perfect for defining and sharing state across the app.

This project represents a further refinement of my now-preferred toolset and set a new mark for patterns that I will continue to improve upon in future designs.

TypeScriptReacttRPCReact (TanStack) QueryZodTailwindCSSExpressJSPostgreSQLPrismaJWTnginxNodeJSVite

ShhRoom

ShhRoom embodies a diverse journey—originating as a peer-to-peer video phone application, transitioning into a native app via Electron, incorporating E2E-encrypted text chat (hence the "shh"), and ultimately returning to the browser with a blended HTML/ThreeJS landing page.

While this project isn't exactly focused in terms of a final product, it served as a rich learning ground where I delved into multiple domains. Exploring the WebRTC API (as abstracted through PeerJS) marked the inception of my journey. Subsequently, I discovered that custom React hooks aren't all that scary, React Context makes for a great state management solution, and that the intricate world of encryption methodologies is a weird and scary place. I agree with all the advice that says you should never, ever write your own encryption...but I did it anyway, and it was kind of fun.

The inclusion of Socket.IO, the intricacies of Electron, and the depth of 3D rendering in the browser added layers to my learning experience. Despite its novice-like characteristics, this project served as a catalyst for acquiring diverse technologies and demonstrated the importance of code organization, significantly shaping the trajectory of my future projects.

While this project underwent several iterations over a number of months, it represents my earliest full-scale endeavor. It's worth noting that despite our optimization efforts, the load time is likely to be substantial due to the impressive 3D assets my partner created. Nonetheless, addressing the many challenges presented by this project allowed me to appreciate the importance of optimization and the nuances of managing resource-heavy applications.

If you're feeling adventurous and don't mind a little wait, click the link & go make some coffee.

ReactPeerJSThreeJSTailwindCSSZodExpressJSSocketIOPostgreSQLSequelizeJWTViteNodeJSnginx
  1. ReactReduxTailwindCSSFramer MotionExpressJSPostgreSQLSequelizeJWTStripenginxNodeJSDocker

    Roughly halfway through my time studying at Fullstack Academy, I collaborated with a team of three peers to develop Plants&Co, a comprehensive e-commerce application. Serving as a pivotal milestone in my learning journey, this project helps to highlight the considerable growth and expertise I've gained in the time since its completion, while I still maintain a sense of pride in its functionality and design.

    My team and I implemented essential user functionalities such as user accounts, a persistent shopping cart accessible both for logged-in users and guests, and a favorites system to enhance the user experience. Additionally, we constructed an extensive admin section within the app, empowering administrators to efficiently manage products, categories, and other crucial aspects of the storefront.

    Despite subsequently developing a preference for different tools, my work on Plants&Co exposed me to important and widely-used technologies that contribute significantly to my skill set. Notably, this initial exposure to Redux/RTK for state management and authorization/authentication using JWTs serves as a strong foundation that I have expanded upon in every project since.

    Moreover, this project afforded me invaluable experience in server deployment and configuration, particularly with nginx on a no-frills, do-it-yourself Linux host. This type of hands-on experience continues to be an area I actively engage in and derive satisfaction from despite the availability of instant-deploy services that hide away all the "fun" parts like wrangling environment variables, docker networking, and reverse proxy configurations.

    While I've adopted newer tools and methodologies since completing this project, Plants&Co remains a testament to my adaptability, perseverance, and continuous quest for refining my craft in the ever-evolving landscape of web development. Also it's helpful to look back on this project to see how far I've come since. I've been told that if we look back on old code without at least a little embarrassment it means we've stopped growing. Good news, still growing!!

  2. ReactExpressJSNodeJSReduxPostgreSQLSocketIOSequelizenginxJWTTailwindCSS

    As the final capstone project during my time at Fullstack Academy, I spearheaded a 4-person team in developing LunchBuddy: a Geolocation API-driven app aimed at fostering connections among individuals looking to broaden their social and professional circles.

    Leveraging the user's physical location, LunchBuddy seamlessly connects users within a configurable radius, facilitating meetups for otherwise-solo diners. Integrating Yelp's API, we curated restaurant suggestions based on shared dining preferences, visualized on a Google Map centered on the user's location.

    To keep the nice people behind Yelp's API from getting too annoyed with us, we strategically stored restaurant data in our own database, ensuring reliable and rapid access in future lookups while minimizing third-party requests.

    Also, given the high priority we placed on efficient negotiation between users, I developed a live notification system supported by a Socket.IO-based chat to keep matches in contact with one another. For enhanced safety, the chat feature is only available leading up to scheduled meetups.

    On this point, LunchBuddy prioritized user comfort by implementing post-meetup feedback mechanisms. This data, coupled with profile overlap, empowered us to rank future search results, ensuring top-ranked and well-regarded lunch partners are listed ahead of others on subsequent searches, enhancing the overall user experience.

    This project challenged me to take a leading role on a multifaceted team in crafting innovative solutions that combine geolocation services, third-party API integrations, and real-time communication for a secure and efficient networking experience.

  3. TypeScriptReactReduxZodTailwindCSSGSAPFramer MotionExpressJSMongoosePassportJSJWTStripenginxNodeJSDocker

    Astoria stands as a collaborative venture, expanding upon my e-commerce app experience with added complexities and improved patterns, building upon the foundation laid by previous projects.

    This project marks my introduction into TypeScript—a journey that, despite the occasional tight spot I get into every now and then, swiftly established my preference for the huge advantage that type safety brings to the language. Defining and relying on precise type structures has become a cornerstone, particularly when navigating deeply nested document structures within Mongo/Mongoose.

    Venturing into MongoDB for the first time in this project marked a departure from my familiarity with SQL databases. While it initially challenged ingrained normalization practices shaped through years of writing SQL, the convenience and performance gains achieved through consolidating related information within documents became increasingly evident over the course of the project.

    Additionally, this project introduced me to two indispensable tools: Zod and react-hook-form. Don't get me wrong, I'm glad that I had the experience of writing manually-validated "standard" controlled forms. But that experience gives me the perspective to say that these tools are truly transformative. Zod's schema validation, coupled with seamless integration into react-hook-form, significantly enhanced form handling, swiftly becoming fundamental elements in my toolkit. Their one-two punch revolutionizes React form development, easing what is often considered one of the more challenging aspects of web development—second only to naming stuff.

    Astoria Skincare not only expanded my technical skill set but also served as the platform for embracing new methodologies and tools. These tools have now become integral components in my development toolbox, enriching my approach to future projects.

  4. TypeScriptReacttRPCReact (TanStack) QueryZodTailwindCSSExpressJSPostgreSQLPrismaJWTnginxNodeJS

    Ok so the marketing team is still hashing out the branding, but this solo project stands as my most recent endeavor, a functional work-in-progress aiming to overhaul my recipe management system. Mired in half a dozen tattered binders of printed, scribbled, and stained recipes accumulated over the years, this project serves as a solution to organize and digitize this chaotic collection.

    Initially eyeing a component library for simplicity, I quickly pivoted to create custom UI components. In the pursuit of complexity, I ventured beyond standard UI elements, developing state-aware nested menus, tag pickers, modals, intricate search and filter functionalities, and animated-height accordions. While I know I could've pulled these components from one of a hundred different libraries and finished the project much more quickly, I take pride in these more intricate UI solutions I've crafted and especially the earned component design lessons they represent.

    UI widgets aside, this project served as a gateway to discovering invaluable tools, most notably tRPC (and its counterpart, TanStack Query, formerly known as React Query). Embracing this toolset—tRPC, Zod, react-hook-form, Prisma, and TypeScript—proved transformative. The robustness of cohesive validation logic between client and server, coupled with type-guarded tRPC mutations, takes much of the frustration and uncertainty out of the development process. Seriously, I'm a fan...ask me about tRPC at your own risk.

    Finally, those efficiencies and DX improvements enabled me to dig deeper than I had previously on state management. Most of my previous projects utilized Redux/RTK, which I maintain is a great tool, but given the tech stack on this project I discovered that React's own Context API was perfect for defining and sharing state across the app.

    This project represents a further refinement of my now-preferred toolset and set a new mark for patterns that I will continue to improve upon in future designs.

  5. ReactPeerJSThreeJSTailwindCSSZodExpressJSSocketIOPostgreSQLSequelizeJWTNodeJSnginx

    ShhRoom embodies a diverse journey—originating as a peer-to-peer video phone application, transitioning into a native app via Electron, incorporating E2E-encrypted text chat (hence the "shh"), and ultimately returning to the browser with a blended HTML/ThreeJS landing page.

    While this project isn't exactly focused in terms of a final product, it served as a rich learning ground where I delved into multiple domains. Exploring the WebRTC API (as abstracted through PeerJS) marked the inception of my journey. Subsequently, I discovered that custom React hooks aren't all that scary, React Context makes for a great state management solution, and that the intricate world of encryption methodologies is a weird and scary place. I agree with all the advice that says you should never, ever write your own encryption...but I did it anyway, and it was kind of fun.

    The inclusion of Socket.IO, the intricacies of Electron, and the depth of 3D rendering in the browser added layers to my learning experience. Despite its novice-like characteristics, this project served as a catalyst for acquiring diverse technologies and demonstrated the importance of code organization, significantly shaping the trajectory of my future projects.

    While this project underwent several iterations over a number of months, it represents my earliest full-scale endeavor. It's worth noting that despite our optimization efforts, the load time is likely to be substantial due to the impressive 3D assets my partner created. Nonetheless, addressing the many challenges presented by this project allowed me to appreciate the importance of optimization and the nuances of managing resource-heavy applications.

    If you're feeling adventurous and don't mind a little wait, click the link & go make some coffee.

Let's
connect.

Email instead