<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jake Jarvis</title>
    <description>The latest articles on DEV Community by Jake Jarvis (@jakejarvis).</description>
    <link>https://dev.to/jakejarvis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F241136%2F07b959dc-b962-45f5-8d3a-e4d61871f6d0.jpg</url>
      <title>DEV Community: Jake Jarvis</title>
      <link>https://dev.to/jakejarvis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jakejarvis"/>
    <language>en</language>
    <item>
      <title>Revenge of the JavaScript: Moving from Hugo to Next.js</title>
      <dc:creator>Jake Jarvis</dc:creator>
      <pubDate>Thu, 07 Apr 2022 14:53:33 +0000</pubDate>
      <link>https://dev.to/jakejarvis/revenge-of-the-javascript-moving-from-hugo-to-nextjs-4986</link>
      <guid>https://dev.to/jakejarvis/revenge-of-the-javascript-moving-from-hugo-to-nextjs-4986</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/jakejarvis/jarv.is/pull/711/files"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p3I3BfSy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/_next/image/%3Furl%3D%252Fstatic%252Fimages%252Fnotes%252Fhugo-to-nextjs%252Fpr.png%26w%3D1920%26q%3D65" alt="Pull Request #711" width="880" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll say right off the bat: &lt;a href="https://jarv.is/"&gt;my personal website&lt;/a&gt; has a &lt;em&gt;loooong&lt;/em&gt; history of going overboard with its tech stack. I use my domain as a vehicle to &lt;a href="https://www.jvt.me/talks/overengineering-your-personal-website/"&gt;learn new things&lt;/a&gt;, and given &lt;a href="https://stackoverflow.blog/2018/01/11/brutal-lifecycle-javascript-frameworks/"&gt;how frequently&lt;/a&gt; the tides turn in the frontend development waters these days, things can (and did) get messy pretty quickly.&lt;/p&gt;

&lt;p&gt;I discovered &lt;a href="https://gohugo.io/"&gt;&lt;strong&gt;Hugo&lt;/strong&gt;&lt;/a&gt; and started using it almost four years ago (&lt;a href="https://github.com/jakejarvis/jarv.is/commit/6fff44e8e2773d0ca417879b4dd69860871cd89c"&gt;6fff44e&lt;/a&gt;) in an effort to get back to the basics. Static site generators and buzzwordy &lt;a href="https://www.cloudflare.com/learning/performance/what-is-jamstack/"&gt;JAMstack&lt;/a&gt; philosophies were all the rage, and the potential simplicity of having a website with HTML that I could have understood &lt;a href="https://jarv.is/previously/"&gt;as a kid&lt;/a&gt; sounded fun and refreshing. Very quickly, I became a huge Hugo &lt;a href="https://github.com/jakejarvis?tab=repositories&amp;amp;q=hugo"&gt;cheerleader&lt;/a&gt;, and I didn’t even add &lt;em&gt;any&lt;/em&gt; JavaScript for over a year as a kind of challenge to myself. But as I saw certain JS frameworks and tools explode in popularity, some FOMO started setting in, and bringing things like &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; into the mix became incredibly tempting.&lt;/p&gt;

&lt;p&gt;Turning to lighter frameworks like &lt;a href="https://lit.dev/"&gt;Lit&lt;/a&gt; and then &lt;a href="https://preactjs.com/"&gt;Preact&lt;/a&gt; allowed me to tell myself I was still being a minimalist while dipping my toes in the component-filled waters. I added Preact (&lt;a href="https://github.com/jakejarvis/jarv.is/commit/b755b66d1982892b3de914f9cc5bded2d7b99bc7"&gt;b755b66&lt;/a&gt;) to power the &lt;a href="https://jarv.is/projects/"&gt;/projects&lt;/a&gt; page, the &lt;a href="https://jarv.is/contact/"&gt;contact form&lt;/a&gt;, and the hit counter at the top of each post. These components were made dynamic via &lt;a href="https://github.com/jakejarvis/jarv.is/tree/v4/api"&gt;serverless functions&lt;/a&gt; written in — you guessed it — JavaScript.&lt;/p&gt;

&lt;p&gt;By the end of the Hugo chapter, I was using a &lt;a href="https://github.com/jakejarvis/jarv.is/blob/v4/package.json"&gt;cornucopia&lt;/a&gt; of build tools behind the scenes to keep everything glued together: &lt;a href="https://webpack.js.org/"&gt;Webpack&lt;/a&gt;, &lt;a href="https://gulpjs.com/"&gt;Gulp&lt;/a&gt;, &lt;a href="https://esbuild.github.io/"&gt;esbuild&lt;/a&gt;, &lt;a href="https://babeljs.io/"&gt;Babel&lt;/a&gt;, &lt;a href="https://terser.org/"&gt;Terser&lt;/a&gt;, &lt;a href="https://postcss.org/"&gt;PostCSS&lt;/a&gt;, &lt;a href="https://github.com/sass/node-sass"&gt;node-sass&lt;/a&gt;, &lt;a href="https://github.com/imagemin/imagemin"&gt;imagemin&lt;/a&gt;… That’s a of JavaScript tooling for a site that’s allegedly avoiding JavaScript at all costs, and realizing this let me &lt;em&gt;finally&lt;/em&gt; give myself permission to go all-in.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="https://nextjs.org/"&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/a&gt;, which caught my eye over other JS-centric SSGs (like &lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt;, &lt;a href="https://www.11ty.dev/"&gt;11ty&lt;/a&gt;, or &lt;a href="https://hexo.io/"&gt;Hexo&lt;/a&gt;) because it sounded like the best of both worlds. Next outputs a fully static HTML version of your site just like Hugo does &lt;strong&gt;and&lt;/strong&gt; uses React to render pages dynamically (a bit like a single-page web app would behave). And once I learned how its &lt;a href="https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration"&gt;incremental static regeneration&lt;/a&gt; feature works, I realized that my Hugo site was actually &lt;strong&gt;less static&lt;/strong&gt; than it could be with a framework like Next! Pages like &lt;a href="https://jarv.is/projects/"&gt;/projects&lt;/a&gt;, which pulls data from the GitHub API, had no actual content if you were to right-click and view source — but with Next, the project data actually exists in the static HTML initially sent by the server and is &lt;a href="https://reactjs.org/docs/react-dom.html#hydrate"&gt;“hydrated”&lt;/a&gt; with the same data via React on the client-side. If you host everything on &lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt;, this becomes even more seamless. (More on that later.)&lt;/p&gt;

&lt;h3&gt;
  
  
  My requirements for Next.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page sizes remain well under 1 MB.&lt;/strong&gt; Minus images and third-party things like Twitter embeds, of course, I think I’ve achieved this on every page — the &lt;a href="https://jarv.is/"&gt;homepage&lt;/a&gt; still hovers around only 512 kB in total! Being &lt;em&gt;super&lt;/em&gt; careful when choosing dependencies (&lt;a href="https://bundlephobia.com/"&gt;Bundlephobia&lt;/a&gt; is awesome, btw) and making sure &lt;a href="https://next-code-elimination.vercel.app/"&gt;not to send&lt;/a&gt; any server-side code to the browser can make a huge difference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All content and core functionality is still available without JavaScript.&lt;/strong&gt; Go ahead and try it! Besides the obvious reasons, this was also crucial in keeping the &lt;a href="http://jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion/"&gt;🧅 Tor mirror&lt;/a&gt; functional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fewer&lt;/strong&gt;  &lt;strong&gt;devDependencies and consolidated build tooling.&lt;/strong&gt; I don't want to look at another Gulp task for as long as possible. Next's &lt;a href="https://nextjs.org/docs/api-reference/next.config.js/custom-webpack-config"&gt;built-in&lt;/a&gt; Webpack and Babel support has come in clutch here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same (or better)&lt;/strong&gt; &lt;a href="https://web.dev/learn/#lighthouse"&gt;&lt;strong&gt;Lighthouse scores&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;.&lt;/strong&gt; The heavier load of JS has certainly affected performance a bit, but any modern browser can easily keep up with any React code I’ll be using at this scale. And because of Next’s static page generation (and &lt;a href="https://github.com/garmeeh/next-seo"&gt;next-seo&lt;/a&gt;) nothing has changed in the realm of SEO.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nvMVGi0S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/_next/image/%3Furl%3D%252Fstatic%252Fimages%252Fnotes%252Fhugo-to-nextjs%252Fweb-vitals.png%26w%3D1920%26q%3D65" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nvMVGi0S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/_next/image/%3Furl%3D%252Fstatic%252Fimages%252Fnotes%252Fhugo-to-nextjs%252Fweb-vitals.png%26w%3D1920%26q%3D65" alt="Vercel web vitals analytics" width="880" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Things I still miss from Hugo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native&lt;/strong&gt; &lt;a href="https://daringfireball.net/projects/markdown/"&gt;&lt;strong&gt;Markdown&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;support with&lt;/strong&gt; &lt;a href="https://gohugo.io/content-management/shortcodes/"&gt;&lt;strong&gt;shortcodes&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;.&lt;/strong&gt; I’m enjoying the React-ified &lt;a href="https://mdxjs.com/"&gt;MDX&lt;/a&gt; flavor of Markdown, but wrestling with &lt;a href="https://www.npmjs.com/package/@next/mdx"&gt;@next/mdx&lt;/a&gt;, &lt;a href="https://github.com/hashicorp/next-mdx-remote"&gt;next-mdx-remote&lt;/a&gt;, and/or &lt;a href="https://github.com/kentcdodds/mdx-bundler"&gt;mdx-bundler&lt;/a&gt; adds a whole new layer of potential breakage. Nothing beats the native parser that comes with Hugo when it comes to convenience and compatibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure HTML output.&lt;/strong&gt; This is a bit of a fallacy, though, considering the number of serverless Lambda functions I ended up having.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowing every corner of the frontend code and how it works.&lt;/strong&gt; Don’t ask me to explain what the 152-c95759cd62a.js file you just downloaded from my own website does. Because I have no clue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total and complete portability.&lt;/strong&gt; In exchange for a &lt;em&gt;lot&lt;/em&gt; of convenience, I accepted a bit of vendor lock-in when I put all of my eggs in &lt;a href="https://vercel.com/solutions/nextjs"&gt;Vercel’s&lt;/a&gt; basket. Next.js is their creation, and other hosts (including &lt;a href="https://docs.netlify.com/configure-builds/common-configurations/next-js/"&gt;Netlify&lt;/a&gt;, &lt;a href="https://render.com/docs/deploy-nextjs-app"&gt;Render&lt;/a&gt;, &lt;a href="https://docs.digitalocean.com/tutorials/app-nextjs-deploy/"&gt;DigitalOcean&lt;/a&gt;, etc.) have begun adding support for some of the core functionality. But quite a few of the more exciting features (like &lt;a href="https://vercel.com/docs/concepts/image-optimization"&gt;image optimization&lt;/a&gt; and &lt;a href="https://nextjs.org/analytics"&gt;analytics&lt;/a&gt;) are clearly &lt;a href="https://nextjs.org/docs/deployment#managed-nextjs-with-vercel"&gt;designed for Vercel&lt;/a&gt; and Vercel only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing the actual migration was pretty boring and uneventful (besides the wealth of React knowledge I got to teach myself, which I’m sure is still less than 2% of what’s out there). I found the goal with the least mental friction was to build a 1:1 replica of the Hugo site with Next.js, to the point where a visitor wouldn’t have been able to tell there was a change, except for &lt;em&gt;much&lt;/em&gt; faster page transition times. You can track how that went in &lt;a href="https://github.com/jakejarvis/jarv.is/pull/711"&gt;this pull request&lt;/a&gt; and judge for yourself…&lt;/p&gt;

&lt;p&gt;As always, this entire site is &lt;a href="https://github.com/jakejarvis/jarv.is"&gt;open source&lt;/a&gt;, and I’ve also archived the Hugo version in &lt;a href="https://github.com/jakejarvis/jarv.is-hugo"&gt;a separate repository&lt;/a&gt; for reference and comparison.&lt;/p&gt;

&lt;p&gt;Let me know what you think about the “new” site as well as frameworks like React and hybrid static/server tools like Next.js. To anyone else currently using Hugo or building pure HTML sites, have you been tempted recently by a JavaScript framework du-jour? Or are you ignoring the hype and waiting for the next trendy project to come along and “change everything” yet again? ( &lt;a href="https://remix.run/"&gt;Remix&lt;/a&gt; is my prediction, for what it’s worth…)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>My First Code: Jake's Bulletin Board</title>
      <dc:creator>Jake Jarvis</dc:creator>
      <pubDate>Wed, 02 Oct 2019 14:32:17 +0000</pubDate>
      <link>https://dev.to/jakejarvis/my-first-code-jake-s-bulletin-board-17fp</link>
      <guid>https://dev.to/jakejarvis/my-first-code-jake-s-bulletin-board-17fp</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LnRiZl9n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/netscape.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LnRiZl9n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/netscape.png" alt="Awesome First Code on GitHub" width="880" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BVrpLzDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/badges.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BVrpLzDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/badges.png" alt="Code Quality: A for effort" width="880" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recently published my terrible, horrible, no good, very bad &lt;a href="https://jarv.is/y2k"&gt;first HTML site&lt;/a&gt; and &lt;a href="https://github.com/jakejarvis/jbb#readme"&gt;first PHP project&lt;/a&gt; ever and developed a new addiction to Web 1.0 nostalgia, fed by others who were brave enough to do the same.&lt;/p&gt;

&lt;p&gt;So, I started compiling an &lt;a href="https://github.com/jakejarvis/awesome-first-code"&gt;awesome-list of other "first code" on GitHub&lt;/a&gt;. It was originally aimed towards those of us who grew up in the Geocities and FrontPage and Macromedia Flash era, but coders of all ages are welcome to dust off that floppy disk or 256MB USB thumb drive (or the &lt;a href="https://archive.org/web/"&gt;Wayback Machine&lt;/a&gt;, if you can remember your first screen name 😬) and commit your first project unmodified to GitHub for posterity — and proudly &lt;a href="https://github.com/jakejarvis/awesome-first-code/edit/master/readme.md"&gt;link to it&lt;/a&gt; on the list! (I'm trying very hard to make this a cool trend, if you couldn't tell.)&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jakejarvis"&gt;
        jakejarvis
      &lt;/a&gt; / &lt;a href="https://github.com/jakejarvis/awesome-first-code"&gt;
        awesome-first-code
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      👶 An awesome list for those who are brave enough to share their first programming projects ever. No shame allowed here!
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
 

&lt;p&gt;Hopefully we can all look back at our first projects and be proud of how far we've come since then — no embarrassment allowed! Okay, maybe a little is fine...&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--As6Yq5-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-logo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--As6Yq5-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-logo.png" alt="Jake's Bulletin Board" width="640" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aside from my &lt;a href="https://jarv.is/y2k"&gt;first HTML creation&lt;/a&gt; (circa 2001), my first real coding project was in 2003: a PHP 4 masterpiece creatively titled &lt;strong&gt;Jake's Bulletin Board&lt;/strong&gt;. I've published the &lt;a href="https://github.com/jakejarvis/jbb"&gt;source code in full on GitHub&lt;/a&gt; for your viewing pleasure and highlighted the best/worst parts below.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jakejarvis"&gt;
        jakejarvis
      &lt;/a&gt; / &lt;a href="https://github.com/jakejarvis/jbb"&gt;
        jbb
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A PHP bulletin board creatively titled Jake's Bulletin Board, circa 2003. (My first full coding project ever – complete with bugs and security holes and horrendous style!)
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;If you're bored on a rainy day, potential activities could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easiest code review you'll do in your entire career. (Or hardest, depending on your attitude.)&lt;/li&gt;
&lt;li&gt;Hacking speed-runs to boost your infosec self-esteem.&lt;/li&gt;
&lt;li&gt;Beating the &lt;a href="http://goldenbookofrecords.com/longest-laughter/"&gt;world record for longest laugh&lt;/a&gt;, currently held by Mr. Belachew Girma of Ethiopia with 3 hours and 6 minutes.&lt;/li&gt;
&lt;li&gt;Actually getting this to run in 2019.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Embarrassing Highlights
&lt;/h2&gt;

&lt;p&gt;Who cares if somebody wants to delete a post with the ID "&lt;code&gt;*&lt;/code&gt;" no matter the author? (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/delete_reply_submit.php#L9"&gt;delete_reply_submit.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
  &lt;span class="nv"&gt;$query2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"DELETE FROM jbb_replies
WHERE replyID ='&lt;/span&gt;&lt;span class="nv"&gt;$replyID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$result2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sessions based on storing an auto-incremented user ID in a cookie. (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/login_submit.php#L28"&gt;login_submit.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nb"&gt;session_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;session_start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"ck_userID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"ck_username"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"ck_groupID"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;groupID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Viewing a "private" message based solely on a sequential message ID. (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/pm_view.php#L13"&gt;pm_view.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nv"&gt;$query1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_pm WHERE pmID = '&lt;/span&gt;&lt;span class="nv"&gt;$pmID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Incredibly ambitious emoticon and &lt;a href="https://en.wikipedia.org/wiki/BBCode"&gt;BBCode&lt;/a&gt; support. I honestly can't begin to explain this logic. (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/functions.php#L18"&gt;functions.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nv"&gt;$replacement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;IMG SRC=images/emoticons/smile.gif&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;IMG SRC=images/emoticons/bigsmile.gif&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;IMG SRC=images/emoticons/frown.gif&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;IMG SRC=images/emoticons/crying.gif&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;IMG SRC=images/emoticons/blush.gif&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ... yada yada yada ...&lt;/span&gt;
&lt;span class="nv"&gt;$replacement21&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;a href="'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement22&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'"&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement23&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;/a&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement24&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;FONT COLOR="'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement25&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;/FONT&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement26&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;FONT SIZE="'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$replacement27&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;BR&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':)'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':D'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':('&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':crying:'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':blush:'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// you get the point...&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[URL='&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[/URL]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[FONT COLOR='&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[/FONT]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[FONT SIZE='&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$topicval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'
'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replacement27&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$topicval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// repeated five more times throught the code...&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saving new passwords as plaintext — probably the least problematic problem. (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/register_submit.php#L10"&gt;register_submit.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"INSERT INTO jbb_users (username, password, email, avatar) VALUES ('&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt;','&lt;/span&gt;&lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;','&lt;/span&gt;&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;','images/avatars/noavatar.gif')"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I guess I gave up on counting &lt;code&gt;$query&lt;/code&gt;s by ones...  (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/functions.php#L231"&gt;functions.php&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$topic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_fetch_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result30&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$query40&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_users WHERE userID = '&lt;/span&gt;&lt;span class="nv"&gt;$topic-&amp;gt;userID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$result20&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query40&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$query50&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_replies WHERE replyID = '&lt;/span&gt;&lt;span class="nv"&gt;$replyID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$result50&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query50&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_fetch_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result50&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$query60&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_users WHERE userID = '&lt;/span&gt;&lt;span class="nv"&gt;$reply-&amp;gt;userID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$result60&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_fetch_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$query7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_topics WHERE userID = '&lt;/span&gt;&lt;span class="nv"&gt;$reply-&amp;gt;userID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$result7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$query8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM jbb_replies WHERE userID = '&lt;/span&gt;&lt;span class="nv"&gt;$reply-&amp;gt;userID&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$result8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;mysql_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$usertopics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mysql_numrows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$userreplies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mysql_numrows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installation "wizard" (that's the joke, I presume...) (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/setup/sql_submit.php"&gt;sql_submit.php&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PN0MXEMD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PN0MXEMD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen1.png" alt="JBB Installation Wizard" width="880" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And finally, JBB's actual interface... or literally as much of it as I could get to function in 2019. (&lt;a href="https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/index.php"&gt;index.php&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfKcN9e---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfKcN9e---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen3.png" alt="JBB Homepage" width="880" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cSK_C4SO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cSK_C4SO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jarv.is/notes/my-first-code/images/jbb-screen4.png" alt="JBB Post" width="880" height="502"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://jarv.is/notes/my-first-code/"&gt;https://jarv.is/notes/my-first-code/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>php</category>
      <category>beginners</category>
      <category>motivation</category>
    </item>
  </channel>
</rss>
