DEV Community

Cover image for What tools would you choose to create a personal portfolio site if starting from scratch?
Ben Halpern
Ben Halpern Subscriber

Posted on

What tools would you choose to create a personal portfolio site if starting from scratch?

No wrong answers here, what tools/stack would you choose and why?

Top comments (95)

Collapse
 
theaccordance profile image
Joe Mainwaring • Edited

I've been brainstorming a new portfolio solution for myself over the last few days, something atypical when you think of the word portfolio. What I've come up with so far:

  • Leaning towards a one-pager, no thought given on HTML/CSS/JS frameworks yet.
  • Content is a combination of static and dynamic data. Dynamic data would be information from third-party services & insights that would have to be re-calculated every time new data is added.
  • Since some of this dynamic data might be large (ex: stock ticker analysis), worker tasks would be written to fetch this data and compile insights on a schedule, saving the new data to a db or redis for the website to quickly fetch.
  • Open Source source so my work can be reviewed for technical competency
  • Github Actions for CI and CD
  • Continuous delivery trigger on something like a release tag being added to a commit on the main trunk.
  • Likely will live in Digital Ocean or GCP
  • Localized for translation

In terms of dynamic data, some ideas I'm floating:

  • Pull in blog posts from dev.to
  • A "top 10 dividends" report which returns which stocks have the highest dividend yield.
  • Github data like the contribution graph (although today's looks far less impressive to my team lead days)
  • Insights around my cloud spend - What resources I'm using, how many domains have I registered, etc.
  • LinkedIn data
  • Career twitter insights, using current twitter data + prior archives
  • Clips from xbox
  • Health data like steps and workouts, maybe more to add transparency around cancer treatment.

Static Content I'm toying around with:

  • Biography
  • Showcase Highlight - Past Projects
  • A map of where I've traveled
  • Recommendations for Third-Party Services
Collapse
 
riapacheco profile image
Ria Pacheco

Your portfolio sounds super impressive / comprehensive so I feel like the work would just speak for itself with a simple website builder (that wouldn't require your having to maintain it)? Every time I've tried to create a comprehensive CV, coded from scratch, I've regretted it lolol.

Here's my portfolio / cv site that I created with carrd.co: ria.run
:)

Collapse
 
theaccordance profile image
Joe Mainwaring

Hi Ria! Thanks for sharing your portfolio, you may have actually inspired me to look further into carrd and see if maybe I can just publish updates there.

Could I achieve what I'm looking for with something more simple? Absolutely. But the truth is that I don't need a portfolio to market myself either. My interest of late in publishing a portfolio was to use it as an exercise in implementing a background worker process. I've done a lot of SaaS feature work, but I never got around to background processes before I moved on from an individual contributor role.

Beyond wanting to scratch that itch, I'm all for KISS with the rest of the stack.

Thread Thread
 
riapacheco profile image
Ria Pacheco

Oh man, that’s sick. What about it gives you that itch exactly? I’ve gotten a different itch lately —to get back to the tech side from this marketing role. Lol.

Thread Thread
 
theaccordance profile image
Joe Mainwaring • Edited

I'm coming up on 2 years since I moved from an IC role into management and I haven't had many consulting opportunities of late due to covid and cancer.

Now that we're getting beyond the pandemic and my health has stabilized, it's time to shake off the rust and get back to the hustle I had previously, scratching this itch is practice for invoicing someone else for a similar job

Thread Thread
 
riapacheco profile image
Ria Pacheco

I enjoy that you're so chill about being inspiring AF.

Collapse
 
amiamigo profile image
Ami Amigo

I love yours too Ria. Was that a template? It's very beautiful...what tech stack did you use?

Thread Thread
 
riapacheco profile image
Ria Pacheco

Check out carrd.co! I think it's probably the cleanest UI I've ever seen in a site builder. That anti-aliasing is on point! 👌

Collapse
 
garrett profile image
Garrett / G66

Love your microcopy under "Curriculum Vitae"

Collapse
 
andriusmv profile image
Andres Moreno Vasquez

ria.run looks amazing! congrats, I loved the experience (of browsing it).

Collapse
 
nabsul profile image
Nabeel Sulieman • Edited

I run my blog/portfolio (nabeel.dev/nabeel.blog) site on DigitalOcean Kubernetes, with a few other sites. Most of the content is static, but there are some dynamic components that are pulled from a database:

  • Site is built in ASP.NET Core
  • I paid for a simple bootstrap-based HTML theme
  • Main pages are hand-crafted HTML
  • Blog posts are written in Markdown and "compiled" to HTML
  • Dynamic data is fetched by the C# code and returned to some simple JS code in the UI

I started on WordPress, then moved to Hugo for a while. Both are fine options, but I'm really enjoying my current setup. The advantaged that I see are:

  • The ability to use my favorite programming language.
  • Static and dynamic content are both really easy to do.
  • The education that comes with doing things from scratch.
  • It's really easy to experiment and add new features.
  • No more nginx/php-fpm/mysql, or messing with other people's code.

I'm not even sure if my current approach is harder or more time consuming overall. I may be starting at a lower layer than a CMS/SSG, but on the flip side I don't have to spend as much time trying to understand a complex system, its plugins, and dealing with the bugs and limitations that comes with all of that.

Collapse
 
waylonwalker profile image
Waylon Walker

This sounds like fantastic portfolio.

Collapse
 
ben profile image
Ben Halpern

I'll go first with an answer that has worked for me, but is not definitely how I would do it next time:

  • Plain HTML, plain CSS, plain JS. No dependencies, no build tools.

The reason for this approach would not be for the ease of initially building or "active" maintenance, but I generally take this approach when building a website I probably won't return to very often. Plan HTML, CSS, and JS — for a fairly small website — never gets out of date, never expires, never uses a build tool I forget how to use.

When I want to update some small thing about a website like this, the saving grace is that I can just do it without remembering the tool chain or dealing with some kind of dependency hell. Things move quickly, and reducing the tooling burden is a huge win in a lot of contexts.


That being said, despite all of that, the drawbacks are that the code and overall process can suffer. Re-usability is tough, and there are some awesome innovations you can't use with this approach.

So I'm really looking forward to hearing your take on this kind of problem. 😀

Collapse
 
liviufromendtest profile image
Liviu Lupei

That's such a practical approach.

Because if you ever want to contract a freelancer to maintain it or improve it, you'll easily find someone who understands plain HTML, CSS, JS.

I'm never sure if modern build tools are really helping us save time or if we just use them because the companies that built them have huge Marketing budgets.

When I first learned about GatsbyJS, I thought:
"Oh, that's cool, probably built by some developers in their spare time. I guess people are tweeting about it because it's really helping them."

But the reality was:
"Built by a for-profit company that raised over $46M from investors and spending a ton of money on Marketing and Twitter influencers."

Not criticizing them, it's a useful tool. But I can never be sure if the hype is real or faked.

The sad part is that such tools can really overcomplicate the development process, and make it less exciting for young folks to learn web development.

10 years ago, someone learning to code got their AHA moment when they made some JavaScript and CSS run in the browser.

And now, someone learning to code might get frustrated when some npm installation randomly fails and give up. Tutorials for beginners should still start with the basics.

Collapse
 
yan profile image
y-an

20ish years ago I was so happy to write first for loop statement in php and see something prints on html. Your comment brings back that good moment back. Would stay all night excited just to learn what else I can do.

Collapse
 
bigbott profile image
bigbott

so true...

Collapse
 
waylonwalker profile image
Waylon Walker

100, if you are not editing the site very often using a framework makes it so much more work to update every 2 years than its worth.

Collapse
 
simeg profile image
Simon Egersand 🎈

Plan HTML, CSS, and JS — for a fairly small website — never gets out of date, never expires, never uses a build tool I forget how to use.

A previous colleague of mine showed me his personal website and it was just this -- a picture of him, his resume, super basic styling and no JS. He was a very skilled front end engineer so I remember being taken back until he explained why.

I thought about that for a long time and now as I have more experience dealing with npm packages, broken updates, new frameworks etc. I believe it makes a lot of sense.

Assuming you don't enjoy maintaining things like that 😄

Collapse
 
phantas0s profile image
Matthieu Cneude

I don't like blog framework, maintaining that is too much of a pain. I had a Ghost blog a long time ago, and each time I needed to update it, something was breaking.

Now I'm using Hugo for a couple of years, and I love it. It's not really a framework (I mean the website itself doesn't depend on it) and it's very extensible. Updating Hugo is super simple too (one binary). It generates the plain HTML so it's super fast.

I believe that static site generator have a big future in front of them, especially for businesses.

Collapse
 
arnebab profile image
Arne Babenhauserheide

My take to avoid the pains of complex tooling is to use autotools. Basically have a Makefile that contains what I need to build. That will keep working. When it’s too hard to represent in a Makefile, it’s too complex to maintain casually.

And staying away from npm, maven, and so forth. It has to keep working without internet access, because anything online can move and that way break my setup.

Collapse
 
joelbonetr profile image
JoelBonetR 🥇

You can add a Bundler as devDependency (Parcel i.e. which is almost zero config) so you can ship your code minified and optimized into production :)

Collapse
 
pcmagas profile image
Dimitrios Desyllas

Also it is good idea to practice on fudamentals before going into fancy stuff.

Collapse
 
matthewbdaly profile image
Matthew Daly

I rebuilt my site in GatsbyJS last year, with Typescript and Tailwind, and I'd probably stick with that if doing it today.

The reasons I had for choosing it are still valid today - it uses React, which I'm familiar with, it supports MDX, which was a big factor since I was migrating from my own custom static site generator which also used Markdown, and it was easy to use custom URLs. The type safety of Typescript and the relative ease in styling from Tailwind were also a big factor in choosing those.

Collapse
 
joelbonetr profile image
JoelBonetR 🥇

I would suggest to use styled-components instead Tailwind. It's not necessary to explain the reason if you try it for 30min 😁

Collapse
 
matthewbdaly profile image
Matthew Daly

I've already tried them and preferred Tailwind.

Thread Thread
 
joelbonetr profile image
JoelBonetR 🥇 • Edited

Reason?

  • With both you reach non-unused css code.
  • tailwind has big coupling with HTML/JSX whereas Styled Components has almost none.
  • Styled Components allows extension with JS template strings.
Thread Thread
 
matthewbdaly profile image
Matthew Daly
  • Not exactly sure what you mean by "tailwind has big coupling with HTML/JSX whereas Styled Components has almost none", but if you mean the fact that it's embedded in the HTML and JSX, that's a good thing in my opinion. Both are facets of presentation of content, and logically they belong together. And if you need to strip out all the styles and start from scratch, that's trivial to do with a simple regex when using Tailwind
  • It's easy to extend Tailwind if you need to, just by updating one simple Javascript config file. But it's very rare to actually need to - the defined classes are very well chosen and cover almost every situation I need, and are named logically and consistently
  • I can use it in any front end templating system I like - it's useful in Vue components, Laravel Blade templates, or PHP template files, as well as in React
  • The elimination of context switching between CSS and JSX or other templating solutions means I can style something much more quickly than I could with any solution that involves writing CSS more directly. Even if it's done within the same file, it slows me down to switch my mental context between JSX and CSS, but with Tailwind I never have to do that
  • The tooling is solid. I use the Tailwind LSP server in Neovim for completion and it's extremely helpful
  • By limiting things like width, height, margin etc to a limited subset of presets, it makes it much easier to maintain consistency across a project, without making everything same-y like Bootstrap often does. But it's easy to amend the existing presets or add your own ones
  • Even with CSS-in-JS solutions it's possible you may wind up with unused CSS embedded in a component - it's less likely than with separate CSS files, but not impossible. That doesn't happen with Tailwind
  • If there are certain repeated patterns in your styling and you're not using a component library like React, it's easy to extract them using the apply directive
  • It's far, far quicker to get up to speed on a new project because I know what the defaults for Tailwind are and what they do, and from the classes on an element I can get a pretty good idea what it looks like without even seeing it in the browser
Thread Thread
 
joelbonetr profile image
JoelBonetR 🥇 • Edited
  • Learning curve: You need to learn Tailwind Syntax, while you use either standard CSS or SCSS inside styled-components.
  • Following the previous one, tailwind leads you to learn the CSS API the bad way, so you'll struggle when jumping into a project that does not use tailwind. i.e. `font-semibold` is not the same as `font-weight: 600;`
  • Extensibility and dynamism: Styled components declare styling using JS template strings, which mean you can pass props and do things like that:
const Paragraph = styled.p`
  font-weight: bold;
  flex: 0 1 100%;
  text-align: ${(props) => props.align};
`;

<Paragraph align='center'> My centered text </Paragraph>
<Paragraph align='left'> Left text on this one </Paragraph>
<Paragraph align='right'> Right align for the last one </Paragraph>
Enter fullscreen mode Exit fullscreen mode

So you can have props that are common to all paragraph components pre-set while adding parametrization just in what you really need.

It also works with React states so you can have a component that changes it's background-color depending on a state, as example.

  • The everything is a component approach on styled-components enforces re-usability of components and SOLID principles while tailwind does the opposite and promote code repetition (by classnames).
  • Reading templates with Tailwind is a hell, most of the time I need to scroll to the right even having a QuadHD screen to read the entire line or making it break to multiple lines. (I'm not sure about which of those is worse, I simply hate both).

There are more reasons not just those but I think it's enough to catch the idea about why Tailwind is marginally used in the industry at a professional/business level.

There's no single software architect I talked to about that which puts tailwind as first option to use and I agree for many reasons (including maintainability and speed of change things on a solid way).

Maybe if you are a backend dev that don't care much about front for any reason or you are just printing your templates from a server side application (¿is there anyone still doing that in 2022?) tailwind will be a no-brainer on that as it was bootstrap back those days.

Thread Thread
 
matthewbdaly profile image
Matthew Daly

Let's take this one by one...

Learning curve: You need to learn Tailwind Syntax, while you use either standard CSS or SCSS inside styled-components.

No, you don't. It's a relatively small number of class names which are internally consistent, descriptive, and intuitive, and can be easily autocompleted with an appropriate LSP server. If anything it's easier to learn than CSS.

Following the previous one, tailwind leads you to learn the CSS API the bad way, so you'll struggle when jumping into a project that does not use tailwind. i.e. font-semibold is not the same as font-weight: 600;

Which is a complete non-issue as I've been in the industry for over a decade and already know CSS. I'm full stack so CSS isn't my primary focus, but I'm certainly not going to struggle with basic stuff like that.

Extensibility and dynamism: Styled components declare styling using JS template strings, which mean you can pass props and do things like that

But you still need to define them inline of the components, so it's easier for different components to get out of sync. Using a much more limited pool of utility classes means it's easier to avoid the situation where one component has 3px padding, another has 2px padding etc.

The everything is a component approach on styled-components enforces re-usability of components and SOLID principles while tailwind does the opposite and promote code repetition (by classnames)

I don't buy this at all. The class names are simple, logical and consistent, and tell you exactly what they do, which is generally one thing and one thing only. They are not repetitive at all.

If you're repeating the same stuff over and over it suggests to me that something needs to be refactored out into its own component. And if it does get too repetitive in one component, you always have the option of using the apply directive.

Reading templates with Tailwind is a hell, most of the time I need to scroll to the right even having a QuadHD screen to read the entire line or making it break to multiple lines. (I'm not sure about which of those is worse, I simply hate both).

I don't have an issue with this. I use Neovim and it wraps the lines fine for me. I've used VSCode a little in the last few years too and didn't have an issue with it there either.

There are more reasons not just those but I think it's enough to catch the idea about why Tailwind is marginally used in the industry at a professional/business level.

This is not only extremely patronising, but complete and utter nonsense.

I work for a digital agency which is owned by a pretty large global network of digital agencies, and is listed on the FTSE. Hundreds of people work for that agency, and thousands for the network, so we're not talking a tinpot little agency. And we use Tailwind pretty much exclusively on new projects. Furthermore, of the other developers I've worked with in the past at my current or previous employers who I'm still in contact with, probably a majority of them use Tailwind these days, including plenty with a greater focus on front end development than I have. And from the buzz I hear about it on social media, and mention of it in job adverts, it's widely used elsewhere.

There's no single software architect I talked to about that which puts tailwind as first option to use

I find this very hard to believe based on my own experience. I would suspect that the people you asked haven't actually tried Tailwind for long enough to make a remotely informed decision about it, or are one of the people who think it's the same thing as inline CSS.

Maybe if you are a backend dev that don't care much about front for any reason

Again, this is deeply patronising. Of course I care about the front end. Having developed Phonegap apps in the past, while working at a small agency where I didn't have any front end support, I've had to build out a nice, usable interface on many occasions.

or you are just printing your templates from a server side application (¿is there anyone still doing that in 2022?)

Are you kidding me? Like I said, I work for a big digital agency network and that is still the majority of what we do, and will be for the foreseeable future. Things like Next.js are useful, but for a lot of real world stuff server-side rendering with a framework like Laravel makes far more sense.

tailwind will be a no-brainer on that as it was bootstrap back those days.

This is not only extremely patronising, but flat out wrong. Tailwind simply doesn't work like Bootstrap, and none of the things I've used it for have ended up looking same-y. It's a very different beast to Bootstrap and if you know it at all (and it's easy to learn) you can produce a decent UI for basically anything you like without each site looking the same.

My front-end colleagues who work with it far more than I do and push it further than I ever do feel the same way.

Thread Thread
 
joelbonetr profile image
JoelBonetR 🥇

Did you notice that I'm speaking on the overall technology and not about my/your experience?

It's not about my or your personal preference but somthing than can be better or worse depending on the situation or what you want to achieve

Thread Thread
 
matthewbdaly profile image
Matthew Daly

Did you notice that I'm speaking on the overall technology and not about my/your experience?

No, you really obviously weren't. You're clearly now trying to shift the scope of the discussion to make it sounds like I was talking solely about my experience, which I wasn't. I work with a team of other developers and I often have to make decisions when choosing a stack that go against my personal preferences and since I'm a grown-up I have no ego about doing so.

Since you're obviously not arguing in good faith I'll bid you good day and leave it there.

Thread Thread
 
jafuentest profile image
Juan A. Fuentest Torcat

If any of you were actual grown ups you would be arguing vim vs emacs

Thread Thread
 
joelbonetr profile image
JoelBonetR 🥇

😂😂😂😂😂

Collapse
 
pierre profile image
Pierre-Henry Soria ✨

Yep, good one 😁

Collapse
 
karanpratapsingh profile image
Karan Pratap Singh

Next.js with SSG. Performance and good SEO. Built-in blog support as well

I open-sourced mine here

For deployment: vercel or netlify.

Keep it simple!

Collapse
 
gass profile image
Gass

This is very nice! .. I really liked the buy me a coffe icon and the color palette

Collapse
 
karanpratapsingh profile image
Karan Pratap Singh

Thanks 😊

Collapse
 
aryank21 profile image
Aryan Kaushik

I created a dynamic protfolio simple, clean elegant and with a little surprise.
Check this out.
aryankaushik.tech/

It is made with html, css and javascript.

Collapse
 
ben profile image
Ben Halpern

That is a lot of fun, I absolutely love it!

Collapse
 
aryank21 profile image
Aryan Kaushik

thanks @ben

Collapse
 
gass profile image
Gass

I like the uniqueness of this. Thanks for sharing. I would maybe create a mechanism to activate and de-activate the painting thing.

Collapse
 
aryank21 profile image
Aryan Kaushik

I intensionally didn't added that to make it more unique. I saw your portfolio its super fantastic.

Collapse
 
hantu0 profile image
Tim

I like the way the color changes, based on which of the links you've followed when you visit them.

Collapse
 
amiamigo profile image
Ami Amigo

Thanks for wasting my two minutes Aryan! I loved it though

Collapse
 
aryank21 profile image
Aryan Kaushik

Thanks, atleast you checked my portfolio 🙏

Collapse
 
marceloandrade profile image
Marcelo Andrade R.

I think to not repeat your self you need some build tool that is minimal, hugo is great for this kind of sites.

Collapse
 
paratron profile image
Christian Engel • Edited

I would not create a personal portfolio site nor did I ever create one.

Don't get me wrong - I have had a personal website since I was a kid. But it was my personal playground where I just tried things that were fun / interesting for myself.

When it came to work reladetd stuff to show off, I found a simple google doc with plain text much more effective. I just write the project name, the timeframe, technologies used and my role in the team.

Thats much easier to read for most companies or recruiters. My code is hosted and can be browsed on github.

But thats just my personal approach.

Collapse
 
aminnairi profile image
Amin • Edited

Writing a portfolio in pure HTML, CSS and JavaScript would be fun, but this would also mean a lot of time spending repeating a lot of things since HTML, CSS and JavaScript do not scale well.

So it would be more interesting to use a JavaScript framework since a portfolio often means no server. But again, there is a JavaScript fatigue to setup a new project with NPM, Webpack, Vite, React, Angular, Vue, ESLint, Jest, ...

With all that in mind I would go the Elm way because:

  • This is a purely functional language and I prefer the guarantees it brings compared to object-oriented programming
  • The bundler is built-in
  • The linter is built-in
  • The testing library is built-in
  • The router is built-in
  • The dependency manager is built-in
  • The JavaScript framework is built-in (it's a core dependency)
  • The compiler errors are the greatest of all programming languages
  • It is easy to go back to any projects months later (thanks to the compiler)

Cons would be:

  • To learn functional programming
  • To learn a ML syntax
  • To accept learning new ways of doing things

Pros would be:

  • Having fun learning new things in a side project
  • Possibly getting good habits when going back to work
  • Having a portfolio that ships with the least amount of errors
  • You can go back to it 5 months later and add a new feature confidently even though you completely forgotten how you built the dang thing
Collapse
 
m_ahmad profile image
Muhammad Ahmad

I'll use following tools.

  • Next.js (Framework)
  • Chakra UI (React component library)
  • Vercel (Deployment)
  • Namecheap (Domain name)
  • Blog (MDX, Dev.to api)
  • Database (Postgresql)
  • ORM (Prisma)

I have already created my portfolio website with above mentioned tools. I love these tools because they make creating a beautiful portfolio website process very easy.
Here is my portfolio link mahmad.me

Collapse
 
jeoxs profile image
José Aponte

A simple Triforce (HTML/CSS/JS) single page website. No frameworks. You might wonder why. Well, let me tell you a story...

In the early days, we used a white paper to show our photo, info, portfolio, education, skills, references and any other relevant information. That is called Curriculum vitae! The famous CV was a simple printed document. Of course, you had to bring your skills certificates.

Now, I've seen a lot of programmers portfolio showing their skills. Some portfolio websites use frameworks, others only use the Triforce. My belief is that we need to build our portfolio in a simple way, but elegant. The site must be fast, lightweight and neat (like the printed document we used to show). We can achieve that using only the triforce. If we use frameworks, we might overload the website with unnecessary libraries. If the browser can load your website under 5 seconds, then you're good to go!

Oh, I forgot to mention VSCode! It's an essential tool for me. Happy Coding!