<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vaunt Developer Blog]]></title><description><![CDATA[The Developer Recognization Platform]]></description><link>https://blog.vaunt.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1676780756234/Xb99joZKq.png</url><title>Vaunt Developer Blog</title><link>https://blog.vaunt.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 12:32:19 GMT</lastBuildDate><atom:link href="https://blog.vaunt.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Why Hosting a Hackathon Is Your Organization’s Secret to Success 🚀]]></title><description><![CDATA[Did you know that X (Twitter), one of the most influential platforms in the world, was originally created as a side project during an Odeo-hosted hackathon event? Or that Facebook’s Like button and Messenger were born from internal hackathons? Hackat...]]></description><link>https://blog.vaunt.dev/why-hosting-a-hackathon-is-your-organizations-secret-to-success</link><guid isPermaLink="true">https://blog.vaunt.dev/why-hosting-a-hackathon-is-your-organizations-secret-to-success</guid><category><![CDATA[hackathon]]></category><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[best practices]]></category><category><![CDATA[organization]]></category><category><![CDATA[#growth]]></category><category><![CDATA[education]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 04 Feb 2025 14:00:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738084576239/f452c623-8c82-42d9-b212-7c532bcf74b3.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Did you know that X (Twitter), one of the most influential platforms in the world, was originally created as a side project during an Odeo-hosted hackathon event? Or that Facebook’s Like button and Messenger were born from internal hackathons? Hackathons have the power to spark ideas that transform industries and redefine the way we connect and create.</p>
<p>Hackathons have become synonymous with innovation and collaboration, serving as a launchpad for creative problem solving, community building, and professional growth. Hackathons consistently prove their ability to drive both technological advancements and lasting social impact. Iconic events including <a target="_blank" href="https://www.treehacks.com/"><strong>TreeHacks</strong></a>, <a target="_blank" href="https://hackberkeley.org/"><strong>Cal Hacks</strong></a>, <a target="_blank" href="https://ethglobal.com/"><strong>ETHGlobal</strong></a><strong>,</strong> <a target="_blank" href="https://hacktoberfest.com/"><strong>Hacktoberfest</strong></a>, <a target="_blank" href="https://www.socialwinterofcode.com/"><strong>Social Winter of Code</strong></a>, and <a target="_blank" href="https://careers.jpmorgan.com/us/en/students/programs/tfsg-hackathons"><strong>JPMorgan Chase’s Code for Good Hackathon</strong></a> further highlight their potential to empower communities and inspire meaningful change.</p>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfDycZY0JTvqGvv3QWUYMilxEax0BbbFeDKzo3D7RdMXyitnWj7hAEOZx-B9YPSNqhGPydvpmWrbpaH6CsDm602uXypzWUtfWmle5A20oqkia_ha2F7O1qiTdxYicW4lxkSB1sJ?key=eCRofR7dGQ1HqsT8yRNX9psr" alt="Vaunt-Hackers" /></p>
<p>Here’s why your organization should host a hackathon—and how to make it a resounding success.</p>
<h2 id="heading-1-foster-innovation-and-solve-real-world-problems">1. Foster Innovation and Solve Real-World Problems</h2>
<p>Hackathons are engines of innovation, pushing participants to think creatively and deliver actionable solutions under time constraints. Whether it’s building cutting-edge blockchain protocols or revolutionary app features, hackathons inspire ingenuity that can redefine industries.</p>
<p>For instance, <strong>ETHGlobal</strong> has become synonymous with Web3 innovation. By hosting hackathons that provide resources, mentorship, and a focused environment, ETHGlobal enables participants to develop decentralized apps, blockchain tools, and other transformative technologies. These events showcase how hackathons deftly solve challenges and explore emerging technologies, resulting in tangible, impactful outcomes.</p>
<p>Hosting a hackathon enables you to channel creative energy within your team or community to tackle industry-specific challenges, leverage innovative technologies, and potentially create groundbreaking solutions.</p>
<h2 id="heading-2-attract-and-retain-talent">2. Attract and Retain Talent</h2>
<p>Hackathons are the perfect stage to discover and engage with top-tier talent, allowing you to see participants’ problem-solving skills in action.</p>
<p>Prestigious events such as <strong>Cal Hacks</strong> and <strong>TreeHacks</strong> consistently attract the brightest minds, giving companies an invaluable opportunity to connect with skilled developers, engineers, and designers. Many organizations use hackathons as a talent pipeline, identifying future employees who demonstrate creativity, resilience, and teamwork.</p>
<p>By hosting a hackathon, you showcase your organization as an innovation leader while also connecting with potential collaborators, contributors, or hires in a natural, high-energy setting.</p>
<h2 id="heading-3-drive-impact-and-elevate-your-brand">3. Drive Impact and Elevate Your Brand</h2>
<p>Hackathons can create both social impact and brand visibility, solidifying your organization’s role as a leader in innovation and responsibility.</p>
<p>For example, <strong>JPMorgan Chase’s Code for Good Hackathon</strong> focuses on designing solutions for nonprofit organizations, attracting participants passionate about making a difference to address real-world issues.</p>
<p>A well-executed hackathon elevates your brand while making a meaningful impact, demonstrating your commitment to innovation, responsibility, and community engagement.</p>
<h2 id="heading-4-build-community-and-inspire-collaboration">4. Build Community and Inspire Collaboration</h2>
<p>Hackathons give diverse groups of individuals the opportunity to come together, collaborate, and solve complex challenges as a team.</p>
<p>Events like <strong>Hacktoberfest</strong> and <strong>Social Winter of Code</strong> stand out for their ability to foster deep connections among participants. By pairing developers, designers, and product managers from different backgrounds, these hackathons enable holistic approaches to problem solving while building a sense of community that lasts long after the event ends.</p>
<p>Hosting a hackathon strengthens your community, attracts new contributors, and provides a space for interdisciplinary collaboration that sparks innovative ideas.</p>
<h1 id="heading-how-to-host-an-unforgettable-hackathon">How to Host an Unforgettable Hackathon</h1>
<p>Hosting a hackathon requires thoughtful planning and execution to maximize impact and engagement. Here’s how to ensure that your event stands out:</p>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeSh56Nqp0W0IsWXaL7pKCNnaDq4b2wxBFX8Hg0Y8qDMq6Su2dY84DUn9JdCHpoeXUXRXneG3vQJ5ELGzIDzILgeOVY3rOJMI7ZTSWApE-IZe7n72d4E_KVYN6LPtASY3AYiQ-KjQ?key=eCRofR7dGQ1HqsT8yRNX9psr" alt="Vaunt_Hackathon_Session" /></p>
<h2 id="heading-1-define-a-clear-purpose">1. Define a Clear Purpose</h2>
<p>Every successful hackathon starts with a well-defined goal:</p>
<ul>
<li><p>Do you want to tackle a specific challenge in your industry?</p>
</li>
<li><p>Are you looking to build a stronger community?</p>
</li>
<li><p>Is your aim to attract top talent or explore new technologies?</p>
</li>
</ul>
<p>Aligning your event’s purpose with your organization’s broader objectives helps focus your efforts and attract the right participants.</p>
<h2 id="heading-2-plan-your-event">2. Plan Your Event</h2>
<p>Decide how you want to host your event: in-person, online, or hybrid. Each comes with pros and cons:</p>
<ul>
<li><p><strong>In-person events</strong> foster direct collaboration and networking but require logistical planning such as venue setup and travel arrangements.</p>
</li>
<li><p><strong>Online events</strong> are more accessible and cost-effective but may lack the energy and immediacy of in-person interactions.</p>
</li>
<li><p><strong>Hybrid events</strong> offer the best of both worlds but can be complex to execute seamlessly.</p>
</li>
</ul>
<p>To help you streamline hackathon logistics, platforms like <a target="_blank" href="https://devfolio.co/"><strong>Devfolio</strong></a>, <a target="_blank" href="https://mlh.io/"><strong>Major League Hacking</strong></a>, and <a target="_blank" href="https://devpost.com/"><strong>Devpost</strong></a> simplify participant registration, project submissions, and judging. These tools save organizers valuable time and effort while ultimately enhancing the participant experience.</p>
<h2 id="heading-3-engage-participants-with-incentives">3. Engage Participants With Incentives</h2>
<p>Incentives like prizes, recognition, and mentorship are critical to promoting participant motivation and energy throughout the event.</p>
<ul>
<li><p>Offer both <strong>tangible rewards</strong> (cash prizes, swag, or tools) and <strong>intangible recognition</strong> (resume-building opportunities).</p>
</li>
<li><p>Platforms such as <a target="_blank" href="https://vaunt.dev/"><strong>Vaunt</strong></a> provide shareable badges/certification and recognition, making every participant feel valued.</p>
</li>
</ul>
<h2 id="heading-4-create-a-supportive-environment">4. Create a Supportive Environment</h2>
<p>A successful hackathon is more than just a competition—it’s an experience.</p>
<ul>
<li><p><strong>Mentorship:</strong> Provide access to mentors who guide participants and help them overcome roadblocks.</p>
</li>
<li><p><strong>Workshops:</strong> Offer skill-building sessions before or during the event to prepare participants and maximize the quality of submissions.</p>
</li>
<li><p><strong>Resources:</strong> Ensure that participants have access to the tools, APIs, and documentation needed to succeed.</p>
</li>
</ul>
<h2 id="heading-5-highlight-and-celebrate-achievements">5. Highlight and Celebrate Achievements</h2>
<p>Recognition is key to building lasting goodwill.</p>
<ul>
<li><p>Highlight standout projects during the event’s closing ceremony or in post-event communications.</p>
</li>
<li><p>Use social media and blogs to showcase top teams and their solutions.</p>
</li>
<li><p>Offer participants a platform, such as <a target="_blank" href="https://vaunt.dev/"><strong>Vaunt</strong></a>, to showcase their contributions and share their achievements with the broader community.</p>
</li>
</ul>
<h2 id="heading-6-promote-collaboration-and-networking">6. Promote Collaboration and Networking</h2>
<p>Encourage participants to form diverse teams and engage with others beyond their immediate circles.</p>
<ul>
<li><p>Facilitate networking opportunities, such as virtual meetups or in-person icebreakers.</p>
</li>
<li><p>Use collaboration tools (e.g., Discord or Slack) to keep communication flowing smoothly.</p>
</li>
</ul>
<h2 id="heading-7-follow-up-after-the-event">7. Follow Up After the Event</h2>
<p>The impact of your hackathon shouldn’t end when the last team presents their solution.</p>
<ul>
<li><p>Stay in touch with participants through newsletters or follow-up emails.</p>
</li>
<li><p>Share outcomes, such as notable projects or metrics, to keep the momentum alive.</p>
</li>
<li><p>Offer continued engagement opportunities: long-term mentorship, open-source contributions, or invitations to future events.</p>
</li>
</ul>
<hr />
<h1 id="heading-conclusion-build-the-future-with-hackathons">Conclusion: Build the Future With Hackathons</h1>
<p>Hosting a hackathon is more than just an event—it’s a launchpad for innovation, collaboration, and lasting growth. From Facebook’s Like button to the groundbreaking blockchain protocols developed at ETHGlobal and global contributions celebrated by Hacktoberfest, hackathons have proven their ability to spark transformative ideas and solve real-world challenges.</p>
<p>By thoughtfully planning your event, leveraging tools like Vaunt, Devfolio, or Devpost to streamline workflows and reward participants, and fostering an environment of mentorship and creativity, your hackathon will create an unforgettable experience with a lasting impact.</p>
<p>Ready to unlock your organization’s full potential? <strong>Start planning your hackathon today</strong> and join the ranks of innovators shaping the future. 🚀</p>
<p>👉 <strong>Learn how</strong> <a target="_blank" href="https://vaunt.dev/"><strong>Vaunt</strong></a> <strong>can help you create an engaging, rewarding hackathon experience.</strong></p>
]]></content:encoded></item><item><title><![CDATA[What to Expect at Your First Hackathon in 2025: A Beginner’s Guide to Success]]></title><description><![CDATA[Did you know that Uniswap, one of the most popular decentralized exchanges, was conceived during an Ethereum hackathon? Founder Hayden Adams developed the first version of Uniswap at ETH NewYork in 2018. Fast forward to 2025, and hackathons such as C...]]></description><link>https://blog.vaunt.dev/what-to-expect-at-your-first-hackathon-in-2025-a-beginners-guide-to-success</link><guid isPermaLink="true">https://blog.vaunt.dev/what-to-expect-at-your-first-hackathon-in-2025-a-beginners-guide-to-success</guid><category><![CDATA[hackathon]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[best practices]]></category><category><![CDATA[#hacktoberfest ]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 21 Jan 2025 16:30:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737473591689/4f7945b5-1196-49fb-a8f6-4fc7aa7ce16b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Did you know that <strong>Uniswap</strong>, one of the most popular decentralized exchanges, was conceived during an Ethereum hackathon? Founder Hayden Adams developed the first version of Uniswap at ETH NewYork in 2018. Fast forward to 2025, and hackathons such as Compound and Polygon continue to serve as launchpads for groundbreaking innovations. These events are where revolutionary ideas take shape!</p>
<p>But hackathons aren’t just for experienced developers—they’re also perfect for beginners. Whether you’re attending your first hackathon to learn, build, or network, 2025 is the perfect year to get started. This guide will help you prepare for your first hackathon, navigate the event, and maximize the exciting opportunities these events offer.</p>
<h2 id="heading-before-the-event-prepare-like-a-pro">Before the Event: Prepare Like a Pro</h2>
<h3 id="heading-understand-the-event-format">Understand the Event Format</h3>
<p>Hackathons can take place in-person, online, or hybrid. Check the event’s theme, schedule, and rules to know what to expect.</p>
<h3 id="heading-pack-the-essentials">Pack the Essentials</h3>
<ul>
<li><p>For in-person events: Bring your laptop, chargers, headphones, snacks, and a reusable water bottle.</p>
</li>
<li><p>For online events: Ensure a stable internet connection and quiet workspace.</p>
</li>
</ul>
<h3 id="heading-build-or-join-a-team">Build or Join a Team</h3>
<p>Many hackathons let you form teams in advance. Choose teammates with complementary skills, e.g., developers, designers, and product managers.</p>
<h3 id="heading-brush-up-on-relevant-skills">Brush Up on Relevant Skills</h3>
<p>Review the tools, APIs, or programming languages you might use. Many hackathons also offer pre-event workshops—take advantage of these!</p>
<h2 id="heading-during-the-event-work-hard-have-fun">During the Event: Work Hard, Have Fun</h2>
<p>Hackathons are fast-paced but incredibly fulfilling. Here’s how to thrive:</p>
<h3 id="heading-brainstorm">Brainstorm</h3>
<ul>
<li><p>Focus on solving a specific problem that excites your team.</p>
</li>
<li><p>Keep project scope realistic for the time available.</p>
</li>
</ul>
<h3 id="heading-communicate-effectively">Communicate Effectively</h3>
<ul>
<li><p>Use tools like Slack or Discord to stay connected with your team.</p>
</li>
<li><p>Divide tasks based on strengths, and sync up regularly to stay aligned.</p>
</li>
</ul>
<h3 id="heading-stay-energized">Stay Energized</h3>
<ul>
<li><p><strong>Food and hydration:</strong> Snack regularly, drink water, and fuel up with nutritious meals.</p>
</li>
<li><p><strong>Rest and breaks:</strong> Take breaks every few hours to refresh your mind and avoid burnout.</p>
</li>
</ul>
<h3 id="heading-manage-your-time">Manage Your Time</h3>
<ul>
<li><p>Create a timeline for your project, breaking tasks into manageable chunks.</p>
</li>
<li><p>Try methods such as the Pomodoro Technique to stay productive.</p>
</li>
</ul>
<h3 id="heading-make-it-fun">Make It Fun</h3>
<p>Enjoy the process! Participate in mini-games, social events, and networking sessions offered by the organizers.</p>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdeQ9Zb-MNGDmRJZvBAu6c-UFtp9uuHGjvGE8bqAkdiEq8qQUPTpygl4CCtHSvRj-DwI4AoKdtujHiJUZ2YaZYlKIHhLHqlWfrnTNNY03lwa2JvjfLby_Tc9InSbGwwwFRcox6rLg?key=_xERchmQZMkMa-0Ym9VnQya5" alt /></p>
<h2 id="heading-after-the-event-celebrate-and-share">After the Event: Celebrate and Share</h2>
<h3 id="heading-showcase-your-work">Showcase Your Work</h3>
<p>Present your project confidently during the demo or submission phase, even if it’s a prototype. Hackathons value creativity and effort as much as completion.</p>
<h3 id="heading-reflect-on-your-experience">Reflect on Your Experience</h3>
<p>What did you learn? What could you improve next time? Who did you meet?</p>
<h3 id="heading-share-your-achievements">Share Your Achievements</h3>
<p>Use platforms like <a target="_blank" href="https://vaunt.dev/"><strong>Vaunt</strong></a> to showcase your work with <a target="_blank" href="https://docs.vaunt.dev/developers/developer_card"><strong>Developer Cards</strong></a> or highlight your badges for milestones achieved during the hackathon. Vaunt connects you with the broader developer community and proudly exhibits your contributions, turning your hard work into tangible career assets.</p>
<h3 id="heading-continue-the-momentum">Continue the Momentum</h3>
<ul>
<li><p>Polish your project, then publish it on GitHub or an open-source repository.</p>
</li>
<li><p>Stay connected with your team and mentors for future collaborations.</p>
</li>
</ul>
<h2 id="heading-your-first-hackathon-awaits">Your First Hackathon Awaits!</h2>
<p>Your first hackathon is more than just an event—it’s a chance to learn, create, and grow in a fun and supportive environment. Start by exploring upcoming hackathons through resources like <a target="_blank" href="https://mlh.io/">Major League Hacking (MLH)</a> or <a target="_blank" href="https://devpost.com/">Devpost</a>, and get ready to make your mark.</p>
<p>And remember, tools like <a target="_blank" href="https://vaunt.dev/"><strong>Vaunt</strong></a> can make your journey even more rewarding by recognizing your achievements and connecting you with like-minded developers. Whether you’re solving problems, making new friends, or earning your first badge, your hackathon experience is something to celebrate!</p>
<p><strong>So, what are you waiting for? Sign up for a hackathon today, and let your creativity shine!</strong></p>
<h2 id="heading-why-vaunt-is-perfect-for-hackathons">Why Vaunt Is Perfect for Hackathons</h2>
<p><a target="_blank" href="https://vaunt.dev/">Vaunt</a> enhances your hackathon experience by providing gamified badges for milestones like <strong>First Commit</strong> or <strong>Top Project</strong>. These badges are shareable on GitHub, Linkedin, and <a target="_blank" href="https://community.vaunt.dev/board/simonmazzaroth">Vaunt profiles</a>, making it easy to showcase your achievements and stand out in the developer community.</p>
]]></content:encoded></item><item><title><![CDATA[Start Your Journey with Serverpod: Contribute and Earn Recognition]]></title><description><![CDATA[At Vaunt, we believe in empowering open-source projects and their communities. That’s why we’re excited to partner with Serverpod, a cutting-edge backend framework, to revolutionize the way developers contribute and are recognized. By combining force...]]></description><link>https://blog.vaunt.dev/start-your-journey-with-serverpod-contribute-and-earn-recognition</link><guid isPermaLink="true">https://blog.vaunt.dev/start-your-journey-with-serverpod-contribute-and-earn-recognition</guid><category><![CDATA[achievements]]></category><category><![CDATA[Dart]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[backend]]></category><category><![CDATA[full stack]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Mon, 16 Dec 2024 14:00:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1733426066289/3ed1d4b5-e872-4c2a-93ae-4a5eceaad282.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At Vaunt, we believe in empowering open-source projects and their communities. That’s why we’re excited to partner with <a target="_blank" href="https://github.com/serverpod/serverpod"><strong>Serverpod</strong></a>, a cutting-edge backend framework, to revolutionize the way developers contribute and are recognized. By combining forces, we’re making open-source development more rewarding and accessible than ever before.</p>
<p>Together, we’re introducing exciting new achievements to recognize and reward developers for their contributions. Whether you’re a seasoned contributor or new to open source, this partnership is designed to celebrate your efforts, amplify your achievements, and connect you with a thriving community.</p>
<h1 id="heading-what-is-serverpod">What Is Serverpod?</h1>
<p><a target="_blank" href="https://serverpod.dev/">Serverpod</a> is the ultimate backend framework built by and for the Flutter community, written entirely in Dart. It’s a powerful platform that streamlines backend development for modern Flutter applications, offering seamless integration with Flutter, robust database support, and effortless API creation. With Serverpod, building scalable, real-time applications becomes a breeze.</p>
<p><a target="_blank" href="https://x.com/ServerpodDev/status/1849761404376470009">https://x.com/ServerpodDev/status/1849761404376470009</a></p>
<p>For developers passionate about Flutter and Dart, Serverpod is your perfect playground for backend innovation. Designed with the same care and precision as Flutter itself, it empowers you to create efficient, user-focused backends with ease. By contributing to Serverpod, you’re helping to shape this cutting-edge framework while contributing to the broader open-source community, making backend development more accessible and powerful for all Flutter developers.</p>
<p>With a vibrant and fast-growing community, regular updates, and a commitment to open collaboration, Serverpod offers contributors the chance to make a real impact. Dive in and join the movement that’s shaping the future of backend development for Flutter!</p>
<h1 id="heading-what-does-the-vaunt-serverpod-partnership-mean-for-you">What Does the Vaunt + Serverpod Partnership Mean for You?</h1>
<p>In partnership with Serverpod, Vaunt offers exciting ways to reward and celebrate your engagement:</p>
<ul>
<li><strong>Achievement Cards</strong>: Earn shareable, visual tokens that recognize your contributions and milestones, from starring the repository to merging pull requests to reporting issues. Each badge tells a story of your impact and helps inspire others.</li>
</ul>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcfet_fVqOtCLsJpwrhH_fnxp4Bqyg0fGgcWDoF8OyTfGtkDNsMO644vnweEpst9g1EzfLD3w2MDHNjLyFNU1ZgVPfXNIwkN0NefIvu4IiBHLVAl9NHthvob-usmedTWsVG6Y8ZVg?key=2QFW26IuMurE5d8jYZaD06P1" alt /></p>
<ul>
<li><strong>Developer Cards</strong>: Build your reputation with a personalized profile that showcases your contributions, skills, and accomplishments within the community.</li>
</ul>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXehgZFryU25LL29ge7moLvRdxOK9XP5WBHIoH0BqejejifY64IXurGfB-ixN0hfnpdA3fcQcbGYM6uLT7i7tduxWlL2jIr2HH0DsqoGvADfwij1GfXBLZPAad52PLc4NSvv4pCYfQ?key=2QFW26IuMurE5d8jYZaD06P1" alt /></p>
<ul>
<li><strong>Notification Bot</strong>: Stay connected with real-time updates and shoutouts for your achievements through <a target="_blank" href="https://github.com/serverpod/serverpod/discussions/2456">Serverpod’s GitHub Discussions</a>. This bot ensures that you’re always informed about your progress and how to unlock new badges.</li>
</ul>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdJM89wgHTrgTz88-o-fUjD73hjXG8vzsIGb4HFcYOWrdUWS7p_ptoOjIR6MvyvpheII430QrNk9DbgfSxvYp_Nv19MSw72yElE25ojQpEX19Wf5uSgcSiqi5aBOsv14b4OI7Is?key=2QFW26IuMurE5d8jYZaD06P1" alt /></p>
<ul>
<li><strong>Vaunt Open Source Community</strong>: Connect, collaborate, and share expertise with like-minded developers in an active and growing ecosystem.</li>
</ul>
<p><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe43Evr9a1g4WcaYG6IFvfnzCM0_oCljcxNIOjv1Q_GTsvh1fBdTyqZHAIFNKDMSLK3g6-8Yn7yxsfEsL7CvZ2meJvs1KrNHtklcHHCS7hbaTqir_sWiPz54IElMHOv-LF0JCEgJQ?key=2QFW26IuMurE5d8jYZaD06P1" alt /></p>
<p>With every step, you’ll earn recognition for your efforts—while supporting a project that’s shaping the future of backend development.</p>
<h1 id="heading-what-achievements-can-you-earn">What Achievements Can You Earn?</h1>
<p>Serverpod’s achievement system features 20 unique badges, each designed to recognize a variety of contributions and milestones. These badges go beyond simple rewards—they’re a powerful way to highlight your skills, track your impact, and gain recognition within the community. Getting started is easy: Star the repository, dive into open issues, and make your first contribution to begin earning achievements. Here are a few examples:</p>
<ul>
<li><p><strong>Art Nouveau</strong>: Honoring early supporters of Serverpod’s first release (1.0), this badge celebrates contributors who had pull requests merged before February 15, 2023</p>
</li>
<li><p><strong>Galactic Guardian</strong>: A badge for dedicated developers who successfully merge 25 pull requests, showcasing their commitment to Serverpod’s growth</p>
</li>
<li><p><strong>Quantum Questioner</strong>: Awarded to those who help uncover and report 100 issues labeled as bugs or enhancements, demonstrating a critical eye for quality</p>
</li>
</ul>
<p>With each badge, Serverpod shows its appreciation for contributors from all stages—whether you’ve been there from the beginning or are just diving in today to leave your mark. This is just the beginning: <strong>Serverpod plans to introduce even more achievements in future releases</strong>, ensuring continuous opportunities to engage and celebrate.</p>
<p>We encourage you to explore these badges and review your progress on the <a target="_blank" href="https://community.vaunt.dev/board/serverpod/repository/serverpod"><strong>Serverpod achievement board</strong></a>, where your contributions take center stage. Once you unlock a badge, don’t forget to share it on social media to showcase your contribution and inspire others!</p>
<h1 id="heading-how-to-contribute-to-serverpod">How to Contribute to Serverpod</h1>
<p>Getting involved with Serverpod is simple, rewarding, and an excellent way to make an impact on the open-source community. Follow these steps to start contributing:</p>
<h2 id="heading-step-1-star-the-repository">Step 1: Star the Repository</h2>
<p>First off, show your support by starring the <a target="_blank" href="https://github.com/serverpod/serverpod"><strong>Serverpod GitHub repository</strong></a>. This helps boost the project’s visibility and connects you with an active community of contributors. Plus, it’s your first step toward earning an <strong>Achievement Badge</strong> for supporting open-source innovation.</p>
<h2 id="heading-step-2-explore-the-project">Step 2: Explore the Project</h2>
<p>Take some time to familiarize yourself with Serverpod’s <a target="_blank" href="https://docs.serverpod.dev/"><strong>documentation</strong></a>, codebase, and existing issues. Understanding the project’s goals and structure makes it easier to identify where you can contribute.</p>
<p>Check out the <a target="_blank" href="https://community.vaunt.dev/board/serverpod/repository/serverpod"><strong>Vaunt achievement board</strong></a> to see what badges are available and set goals for your contributions.</p>
<h2 id="heading-step-3-pick-an-issue-and-get-started">Step 3: Pick an Issue and Get Started</h2>
<p>Browse the <a target="_blank" href="https://github.com/serverpod/serverpod/issues"><strong>Issues tab</strong></a> on GitHub and look for open issues. If you’re new to contributing, look for issues labeled <strong>good first issue</strong> or <strong>help wanted</strong>—these are great starting points.</p>
<p>Have an idea for an improvement or feature? Feel free to open a new issue and discuss it with the maintainers.</p>
<h2 id="heading-step-4-join-discussions-and-collaborations">Step 4: Join Discussions and Collaborations</h2>
<p>Engage and join community discussions in the <a target="_blank" href="https://github.com/serverpod/serverpod/discussions"><strong>GitHub Discussions tab</strong></a> to share your ideas, ask questions, or seek feedback on your contributions. The community is welcoming and ready to support you!</p>
<h1 id="heading-join-us-on-this-journey">Join Us on This Journey</h1>
<p>We invite developers, contributors, and open-source enthusiasts to explore Serverpod, contribute to its development, and earn recognition for their efforts. Whether you’re solving issues, adding features, or helping refine the project, your contributions make a lasting impact.</p>
<p><a target="_blank" href="https://serverpod.dev/">Serverpod</a> needs developers like you to shape its future. Start by starring the <a target="_blank" href="https://github.com/serverpod/serverpod">GitHub repository</a>, exploring open issues, and joining the community today.</p>
<p>Remember to follow Vaunt on <a target="_blank" href="https://twitter.com/">X</a> or join our <a target="_blank" href="https://discord.gg/">Discord</a> to stay updated and share your feedback.</p>
<p>Every contribution makes a difference! Start your journey with Serverpod today and become part of a project that’s transforming backend development.</p>
]]></content:encoded></item><item><title><![CDATA[Celebrate Your Developer Journey With Vaunt’s GitHub Wrap]]></title><description><![CDATA[As we approach the end of the year, developers are reflecting on their contributions and achievements over the past 12 months. Whether it’s tackling bugs, launching new features, or maintaining open-source projects, your hard work deserves celebratio...]]></description><link>https://blog.vaunt.dev/celebrate-your-developer-journey-with-vaunts-github-wrap</link><guid isPermaLink="true">https://blog.vaunt.dev/celebrate-your-developer-journey-with-vaunts-github-wrap</guid><category><![CDATA[wrapup2024]]></category><category><![CDATA[yearinreview]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[community]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 03 Dec 2024 15:00:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944192912/b2426e44-4e88-4553-bc87-422775aeca09.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As we approach the end of the year, developers are reflecting on their contributions and achievements over the past 12 months. Whether it’s tackling bugs, launching new features, or maintaining open-source projects, your hard work deserves celebration. With <strong>Vaunt’s GitHub Wrap</strong>, developers can now showcase personal milestones in style!</p>
<p><a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>Vaunt’s</strong> <strong>GitHub Wrap</strong></a> is a personalized year-end summary for developers, offering the opportunity to reflect on your GitHub journey and share accomplishments with peers, potential employers, and the developer community. Let’s dive into why this tool is perfect for wrapping up your 2024.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944426054/2bf27bc1-79cb-40ef-a025-f1d60286f5ff.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-why-developers-should-use-vaunts-github-wraphttpscommunityvauntdevgithubwrapped2024"><strong>Why Developers Should Use</strong> <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>Vaunt’s GitHub Wrap</strong></a></h3>
<ol>
<li><p><strong>Showcase Your Contributions</strong><br /> Whether you’re a contributor to major open-source projects or working on side projects, Vaunt helps you present your efforts. Highlight your pull requests, issues resolved, repositories launched, and other key contributions in a way that resonates with the developer community.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944494554/d8e74ac4-b9ef-4ad5-9b0e-70cb39a3c127.png" alt class="image--center mx-auto" /></p>
<p> <strong>Boost Your Online Profile</strong><br /> Looking to stand out in the job market or build your online developer portfolio? Sharing your <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024">GitHub Wrap</a> is a unique way to highlight your experience and accomplishments. Add it to your GitHub profile and portfolio, or share it on LinkedIn and social media to showcase your expertise.</p>
</li>
<li><p><strong>Celebrate Your Journey</strong><br /> Coding is a journey filled with learning, growth, and achievements. With <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024">Vaunt’s GitHub Wrap</a>, you can reflect on your progress throughout the year, celebrate what you’ve accomplished, and set new goals for the upcoming year.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944583830/fcd652a9-9b88-433e-a778-ab8dfbaa16b1.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Engage With the Community</strong><br /> Your wrap isn’t just a personal achievement—it’s a conversation starter. Engage with other developers by sharing your wrap, learning about their journeys, and building connections based on shared experiences and contributions.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944533926/43a16253-d6b0-424a-b5cb-56ab128c4232.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<hr />
<h3 id="heading-how-it-works"><strong>How It Works</strong></h3>
<p>Creating your <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>Developer GitHub Wrap</strong></a> is quick and easy:</p>
<ul>
<li><p>Enter your GitHub username on our platform</p>
</li>
<li><p>Vaunt retrieves your public contribution data from GitHub, including commits, pull requests, issues, and more</p>
</li>
<li><p>The data is transformed into a visually appealing and shareable SVG wrap, perfect for sharing on social media, GitHub, and developer communities</p>
</li>
</ul>
<p>Your wrap highlights everything from the number of commits you made to pull requests you opened and merged to the repositories you contributed to—and more. It’s a <strong>complete snapshot</strong> of your year in code!</p>
<hr />
<h3 id="heading-get-started-with-vaunts-developer-github-wraphttpscommunityvauntdevgithubwrapped2024-today"><strong>Get Started with</strong> <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>Vaunt’s Developer GitHub Wrap</strong></a> <strong>Today</strong></h3>
<p>As the year draws to a close, it’s time to celebrate your hard work! Generate your GitHub Wrap today and share your accomplishments with the world.</p>
<p>🔗 <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2023"><strong>Create Your GitHub Wrap Now!</strong></a></p>
<hr />
<h3 id="heading-looking-ahead-to-2025"><strong>Looking Ahead to 2025</strong></h3>
<p>As you continue your journey over the rest of 2024, Vaunt is right by your side to help you track your achievements and celebrate your contributions. Stay tuned for even more insights and features as we move forward into 2025!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731944621883/95d2d12a-e414-4a33-bc06-9af83bcac99d.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-discover-more-with-vaunt"><strong>Discover More With Vaunt</strong></h3>
<p>Engage with your community through <a target="_blank" href="https://docs.vaunt.dev/developers/developer_card"><strong>Developer Cards</strong></a>, <a target="_blank" href="https://docs.vaunt.dev/developers/achievement_card"><strong>Achievement Cards</strong></a><strong>,</strong> <a target="_blank" href="https://community.vaunt.dev/"><strong>Vaunt Open Source Communities</strong></a><strong>,</strong> and more.</p>
<p>Stay connected with us for updates and feature releases. <a target="_blank" href="https://discord.gg/mn29Xkvry2"><strong>Join our Discord</strong></a> or follow us on <a target="_blank" href="https://x.com/VauntDev"><strong>X</strong></a> to stay in the loop.</p>
]]></content:encoded></item><item><title><![CDATA[Wrap Up Your Organizational Achievements in 2024 With Vaunt]]></title><description><![CDATA[As we approach the end of 2024, it’s the perfect time to reflect on your organization’s contributions and milestones over the past year. While individual contributors proudly display their GitHub accomplishments, open-source organizations deserve the...]]></description><link>https://blog.vaunt.dev/wrap-up-your-organizational-achievements-in-2024-with-vaunt</link><guid isPermaLink="true">https://blog.vaunt.dev/wrap-up-your-organizational-achievements-in-2024-with-vaunt</guid><category><![CDATA[Developer]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[community]]></category><category><![CDATA[yearinreview]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 05 Nov 2024 16:20:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730476770962/1a9fadb0-59dc-4c89-b576-96877e5ff816.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As we approach the end of 2024, it’s the perfect time to reflect on your organization’s contributions and milestones over the past year. While individual contributors proudly display their GitHub accomplishments, open-source organizations deserve their own spotlight. That’s where <strong>Vaunt’s Organization GitHub Wrap</strong> comes in.</p>
<p>🔗 <strong>Visit Vaunt’s</strong> <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>GitHub Wrap</strong></a> to generate your organization’s wrap.</p>
<h2 id="heading-why-use-vaunts-github-wrap-to-close-out-2024">Why Use Vaunt’s GitHub Wrap to Close Out 2024?</h2>
<ol>
<li><p><strong>Highlight Community Achievements</strong>: Showcase your team’s contributions across GitHub, including repositories created, issues resolved, and pull requests merged. Turn your data into a story of progress.</p>
</li>
<li><p><strong>Engage Your Community</strong>: Share your GitHub Wrap with stakeholders and the wider developer community. Foster deeper engagement by celebrating collective success and inspiring ongoing contributions in 2024.</p>
</li>
<li><p><strong>Prepare for 2025</strong>: Vaunt’s Wrap is not just a year-end summary—it’s also a tool for continuous growth. As 2025 approaches, use the insights to set benchmarks and gear up for another productive year!</p>
</li>
</ol>
<h2 id="heading-how-it-works">How It Works</h2>
<p>Creating your <strong>Organization GitHub Wrap</strong> is simple:</p>
<ul>
<li><p>Enter your GitHub organization name on our platform</p>
</li>
<li><p>Vaunt uses the public GitHub API to collect key data from your repositories</p>
</li>
<li><p>The data is transformed into a visually stunning wrap highlighting your key metrics and contributions over the past year</p>
</li>
</ul>
<p>With Vaunt’s GitHub Wrap, you get more than numbers—you get a <strong>celebration of your journey</strong> and a chance to inspire future contributions. Your wrap is perfect for sharing via social media, community forums, or internal showcases to highlight your team’s efforts.</p>
<h2 id="heading-why-choose-vaunt">Why Choose Vaunt?</h2>
<p>Vaunt’s GitHub Wrap for organizations offers much more than a year-end summary:</p>
<ul>
<li><p><strong>Build Recognition</strong>: Showcase your organization’s impact within the open-source ecosystem, helping you attract skilled contributors and maintainers</p>
</li>
<li><p><strong>Engage Beyond Statistics</strong>: Highlight the collaborative spirit behind your project and build a stronger community</p>
</li>
<li><p><strong>Create Individual Wraps</strong>: Invite developers within your organization to generate personal wraps to share their individual contributions and achievements across social platforms</p>
</li>
</ul>
<h2 id="heading-looking-forward-to-2025">Looking Forward to 2025</h2>
<p>As we look ahead to 2025, Vaunt’s Organization GitHub Wrap will continue to evolve, providing even deeper insights and recognition for organizations and contributors alike. <strong>Join Vaunt today</strong> to set the tone for a productive 2025 and prepare for a year of growth and innovation.</p>
<p>🔗 <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2024"><strong>Generate your Organization GitHub Wrap today!</strong></a></p>
<h2 id="heading-discover-more-with-vaunt">Discover More With Vaunt</h2>
<p>Further engage with your community through <a target="_blank" href="https://docs.vaunt.dev/organizations/achievements"><strong>Achievement Badges</strong></a>, <a target="_blank" href="https://docs.vaunt.dev/organizations/contributor_card"><strong>Contributor Cards</strong></a><strong>,</strong> and <a target="_blank" href="https://community.vaunt.dev/"><strong>Vaunt Open Source Communities</strong></a>; by hosting <strong>hackathon management</strong> and <strong>hero programs; and more</strong>.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev"><strong>Sign up for Vaunt today</strong></a> to boost engagement and recognition across your projects!</p>
]]></content:encoded></item><item><title><![CDATA[Recognizing Open Source Contributors: Why It Matters]]></title><description><![CDATA[Open source projects are the backbone of the tech industry, but contributions often go unnoticed, especially when they involve non-code tasks like documentation, testing, or design. Recognizing these efforts boosts morale, encourages collaboration, a...]]></description><link>https://blog.vaunt.dev/recognizing-open-source-contributors-why-it-matters</link><guid isPermaLink="true">https://blog.vaunt.dev/recognizing-open-source-contributors-why-it-matters</guid><category><![CDATA[Developer]]></category><category><![CDATA[Recognition Awards]]></category><category><![CDATA[achievements]]></category><dc:creator><![CDATA[Akshat Virmani]]></dc:creator><pubDate>Thu, 17 Oct 2024 14:27:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1729115420502/9ab459f1-1782-4258-9e13-b6cff215906c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Open source projects are the backbone of the tech industry, but contributions often go unnoticed, especially when they involve non-code tasks like documentation, testing, or design. Recognizing these efforts boosts morale, encourages collaboration, and attracts new contributors, helping maintain project quality and longevity.</p>
<p>Platforms such as <a target="_blank" href="http://Vaunt.dev">Vaunt.dev</a> make it easier to spotlight open source contributors by gamifying recognition. Vaunt provides tools to highlight all contributions, fostering a sense of belonging and motivating developers to contribute more.</p>
<h1 id="heading-why-recognition-is-crucial">Why Recognition Is Crucial</h1>
<p>1. <strong>Encourages Consistency:</strong> Acknowledging contributors ensures that they feel valued, motivating them to continue working on the project. Open source thrives on consistent engagement, for which recognition becomes a vital driver.</p>
<p>2. <strong>Attracts New Talent:</strong> New contributors often hesitate to join open source projects due to imposter syndrome. By spotlighting all contributors, from junior developers to experienced engineers, you encourage inclusivity and make the community more approachable.</p>
<p>3. <strong>Promotes Diversity in Contributions:</strong> Contributions like bug reports, testing, or documentation often don’t get the level of recognition that code contributions do. Recognizing these non-code efforts brings balance to the community and ensures that essential yet often overlooked tasks are appreciated.</p>
<h1 id="heading-how-vaunt-supports-contributor-recognition">How Vaunt Supports Contributor Recognition</h1>
<p>Recognizing open source contributors is more than just a gesture of appreciation—it is essential for sustaining a project’s energy, collaboration, and diversity. When contributors, particularly those involved in non-code tasks, feel acknowledged, they are motivated to continue participating and invite others to join the community.</p>
<p><a target="_blank" href="http://Vaunt.dev">Vaunt.dev</a> offers tools to quantify and celebrate contributions—including bug fixes, mentorship, and documentation—across all open source projects. By gamifying recognition, the platform incentivizes contributors and helps maintain vibrant, engaged communities. This structured acknowledgment helps boost morale and long-term project success.</p>
<p>Contributor recognition ensures sustained enthusiasm in open source projects, promoting a collaborative and inclusive environment where everyone’s efforts are valued. Vaunt is key in tracking and celebrating various contributions, making it easier to spotlight all contributors and maintain healthy project ecosystems. By fostering a culture of recognition, open source communities can thrive and grow more inclusively.</p>
]]></content:encoded></item><item><title><![CDATA[Hacktoberfest Prep for Beginners: Your Step-by-Step Guide to Contributing to Open Source]]></title><description><![CDATA[As summer transitions to fall, the tech world anticipates Hacktoberfest 2024! Whether you’re a seasoned developer or just starting your coding journey, Hacktoberfest is the perfect opportunity to dive into open-source contributions. Even if you’re a ...]]></description><link>https://blog.vaunt.dev/hacktoberfest-prep-for-beginners-your-step-by-step-guide-to-contributing-to-open-source</link><guid isPermaLink="true">https://blog.vaunt.dev/hacktoberfest-prep-for-beginners-your-step-by-step-guide-to-contributing-to-open-source</guid><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[beginner]]></category><dc:creator><![CDATA[Ayushi]]></dc:creator><pubDate>Fri, 27 Sep 2024 17:27:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1727211775634/96b5596a-5701-4b7b-b094-5679a1ced6be.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As summer transitions to fall, the tech world anticipates <em>Hacktoberfest 2024</em>! Whether you’re a seasoned developer or just starting your coding journey, Hacktoberfest is the perfect opportunity to dive into open-source contributions. Even if you’re a beginner, this guide will have you confidently contributing to open-source projects and being part of a vibrant global community in no time.</p>
<h3 id="heading-why-hacktoberfest-is-important-for-beginners"><strong>Why Hacktoberfest Is Important for Beginners</strong></h3>
<p>Hacktoberfest is not just a coding event—it’s a celebration of collaboration, community, and learning. By participating, you’ll</p>
<ul>
<li><p>Get hands-on experience with real-world projects</p>
</li>
<li><p>Learn how to work with others in a collaborative environment</p>
</li>
<li><p>Gain exposure to tools like Git and GitHub</p>
</li>
<li><p>Build your coding portfolio and resume</p>
</li>
<li><p>Earn swag and recognition for your contributions!</p>
</li>
</ul>
<h3 id="heading-step-1-get-set-up-with-git-and-github"><strong>Step 1: Get Set Up With Git and GitHub</strong></h3>
<p>Before contributing, you’ll need to familiarize yourself with Git (version control tool) and GitHub (platform for hosting code). These are essential for successful participation in Hacktoberfest.</p>
<ul>
<li><p><strong>Install Git:</strong> Follow a <a target="_blank" href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git">simple guide</a> to install Git on your computer, whether you’re using Windows, macOS, or Linux.</p>
</li>
<li><p><strong>Create a GitHub Account:</strong> Head over to GitHub and create an account if you don’t have one yet. You’ll need it to contribute to projects.</p>
</li>
<li><p><strong>A Step-by-Step GitHub guide</strong>: Mastering GitHub is a crucial step  in your journey. This <a target="_blank" href="https://blog.vaunt.dev/github-for-beginners-a-step-by-step-guide">guide</a> offers key, must-know tips and tricks to help you navigate GitHub confidently and efficiently.</p>
</li>
</ul>
<h3 id="heading-step-2-explore-open-source-projects-and-beginner-friendly-issues"><strong>Step 2: Explore Open-Source Projects and Beginner-Friendly Issues</strong></h3>
<p>Once you’re set up, it’s time to find projects that you can contribute to. GitHub has millions of repositories, many of which are eager for new contributors—especially during Hacktoberfest.</p>
<ul>
<li><p><strong>Search for Beginner-Friendly Issues:</strong> Use labels like good-first-issue or help-wanted to find issues that are beginner-friendly. These are usually simple ones that project maintainers have tagged to help new contributors get started. You can also discover Hacktoberfest projects <a target="_blank" href="https://community.vaunt.dev/hacktoberfest">here</a>.</p>
</li>
<li><p><strong>Join the Hacktoberfest Site:</strong> Officially register for Hacktoberfest via their <a target="_blank" href="https://hacktoberfest.com">website</a> so your contributions can be counted toward your goal of four pull requests.</p>
</li>
</ul>
<h3 id="heading-step-3-learn-the-basics-of-pull-requests"><strong>Step 3: Learn the Basics of Pull Requests</strong></h3>
<p>A pull request (PR) is how you propose changes to a project. This is the main contribution mechanism for Hacktoberfest. When you find an issue you would like to work on:</p>
<ol>
<li><p><strong>Fork the Repository:</strong> This means creating your copy of the project.</p>
</li>
<li><p><strong>Make Changes:</strong> Fix bugs, improve documentation, or add new features.</p>
</li>
<li><p><strong>Submit a Pull Request:</strong> After making your changes, submit a PR so project maintainers can review and merge your changes into the main codebase.</p>
</li>
</ol>
<p>If you’re not sure how to do these, many beginner-friendly tutorials are available, such as this guide to making your first pull request.</p>
<h3 id="heading-step-4-contribute-to-documentation-and-non-code-projects"><strong>Step 4: Contribute to Documentation and Non-Code Projects</strong></h3>
<p>Not all contributions need to be about writing code. Hacktoberfest values <strong>all types of contributions</strong>, including improving documentation, fixing typos, or enhancing project instructions. For beginners, this can be a great way to get comfortable with the open-source process before diving into coding tasks.</p>
<p>Look for projects with documentation-related issues or guides that need updating. This way, you can start contributing without the need for advanced technical knowledge.</p>
<h3 id="heading-step-5-collaborate-and-learn-from-the-community"><strong>Step 5: Collaborate and Learn From the Community</strong></h3>
<p>One of the best parts of Hacktoberfest is the chance to connect with the global developer community. Don’t hesitate to ask questions or seek guidance from project maintainers and other contributors. Open-source communities are usually welcoming and happy to help beginners.</p>
<ul>
<li><p><strong>Join Discussions:</strong> Participate in project discussions and comment threads to better understand issues.</p>
</li>
<li><p><strong>Ask for Feedback:</strong> After submitting a pull request, project maintainers might ask for changes. View this as a learning opportunity.</p>
</li>
</ul>
<h3 id="heading-step-6-stay-consistent-and-focus-on-learning"><strong>Step 6: Stay Consistent and Focus on Learning</strong></h3>
<p>Hacktoberfest isn’t just about completing tasks quickly; it’s about growing as a developer. You’ll need to make <strong>four pull requests</strong> to complete Hacktoberfest—but focus on making meaningful contributions, even if they’re small. Each PR is a chance to learn something new.</p>
<p>Celebrate your progress, no matter how substantial, and stay engaged throughout the month. By the end of Hacktoberfest, you’ll have built new skills, expanded your network, and contributed to projects that help the wider open-source community.</p>
<h3 id="heading-step-7-celebrate-your-achievements"><strong>Step 7: Celebrate Your Achievements</strong></h3>
<p>At the conclusion of Hacktoberfest, participants who successfully submit four pull requests will unlock a digital badge. But beyond the swag, the real reward is the experience and connections you will have made.</p>
<p>Join <strong>Hacktoberfest 2024</strong> to kickstart your open-source journey. Contribute, learn, and be part of something amazing this October!</p>
<h3 id="heading-get-started-your-hacktoberfest-2024-with-vaunt"><strong>Get Started Your Hacktoberfest 2024 with Vaunt</strong></h3>
<p>Discover Hacktoberfest Projects with Ease and leverage <a target="_blank" href="https://community.vaunt.dev/">Vaunt's advanced search engine</a> to help you find the perfect projects that align with your interests and skills.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev"><strong>Sign up for Vaunt today</strong></a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev"><strong>X</strong></a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2"><strong>Discord</strong></a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Introducing Vaunt Open Source Community: Supercharge Your Open-Source Journey]]></title><description><![CDATA[Navigating the vast landscape of open-source projects on GitHub can feel like finding a needle in a haystack. With millions of repositories, how do you separate signal from noise? Enter Vaunt’s latest feature: Vaunt Open Source Community—your new bes...]]></description><link>https://blog.vaunt.dev/introducing-vaunt-open-source-community-supercharge-your-open-source-journey</link><guid isPermaLink="true">https://blog.vaunt.dev/introducing-vaunt-open-source-community-supercharge-your-open-source-journey</guid><category><![CDATA[Open Source]]></category><category><![CDATA[community]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 27 Aug 2024 14:00:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724692416653/c35a192a-fbf0-4bc8-96a6-0867e4104b5a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Navigating the vast landscape of open-source projects on GitHub can feel like finding a needle in a haystack. With millions of repositories, how do you separate signal from noise? Enter Vaunt’s latest feature: <strong>Vaunt Open Source Community</strong>—your new best friend in the world of open-source discovery!</p>
<h3 id="heading-what-is-vaunt-open-source-community"><strong>What Is Vaunt Open Source Community?</strong></h3>
<p>Vaunt Open Source Community is designed to transform the way you find and evaluate open-source projects on GitHub. Whether you’re a developer looking for your next contribution or an organization seeking active maintainers, Vaunt Open Source Community brings precision and clarity to your search.  </p>
<p>🚀 <strong>We’re Live on Product Hunt!</strong> 🚀</p>
<p>If you’re passionate about open source, we’d love your support! <a target="_blank" href="https://www.producthunt.com/posts/vaunt-open-source-community"><strong>Upvote us on Product Hunt</strong></a> and help take Vaunt Open Source Community to more people!</p>
<h3 id="heading-key-features-of-vaunt-open-source-community"><strong>Key Features of Vaunt Open Source Community:</strong></h3>
<h4 id="heading-1-discover-the-trending-repos"><strong>1. Discover the Trending Repos</strong></h4>
<p>Vaunt Open Source Community provides <strong>real-time insights</strong> on trending projects. Now you can easily spot the most active and relevant projects in the community.</p>
<h4 id="heading-2-power-up-your-search-with-advanced-filters"><strong>2. Power Up Your Search With Advanced Filters</strong></h4>
<p>Tired of wading through endless GitHub search results? With advanced filters, Vaunt Open Source Community lets you refine your search to find exactly what you’re looking for. Whether based on language, licenses, or activity level, finding the perfect project has never been easier.</p>
<h4 id="heading-3-evaluate-open-source-health"><strong>3. Evaluate Open-Source Health</strong></h4>
<p>One of the biggest challenges in open source is determining the health and sustainability of a project. Vaunt Open Source Community offers <strong>deep insights into community health metrics</strong>, helping you gauge the activity, maintenance, and overall vitality of a project before you dive in.</p>
<h4 id="heading-4-increase-your-projects-visibility"><strong>4. Increase Your Project’s Visibility</strong></h4>
<p>Are you an open-source maintainer? Vaunt Open Source Community doesn’t just help you find projects—it also helps talented contributors find you. By ensuring that your project is visible to those searching for active, impactful repositories, you can attract the right developers to help your project thrive.</p>
<h3 id="heading-support-us-on-product-hunt"><strong>Support Us on Product Hunt</strong></h3>
<p>We’re excited to launch Vaunt Open Source Community on Product Hunt, and we’d love your support! If you’re as passionate as we are about improving the open-source ecosystem, please take a moment to upvote us on Product Hunt. Your support will help us reach more developers and organizations, enabling smarter, more impactful contributions across the open-source community.</p>
<p><a target="_blank" href="https://www.producthunt.com/posts/vaunt-open-source-community">🚀 Upvote Us on Product Hunt 🚀</a></p>
<h3 id="heading-get-started-with-vaunt-open-source-community-today"><strong>Get Started with Vaunt Open Source Community Today</strong></h3>
<p>Ready to enhance your GitHub experience? <a target="_blank" href="https://community.vaunt.dev/">Start searching smarter and engage with thriving communities!</a> 🚀  </p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Maintainable SQL Query Building with Golang]]></title><description><![CDATA[Any application working with SQL queries can benefit from using a query builder to improve code readability, maintainability, and security. In fact, there are many different libraries that do just that in Golang. Here at Vaunt, we tried many differen...]]></description><link>https://blog.vaunt.dev/maintainable-sql-query-building-with-golang</link><guid isPermaLink="true">https://blog.vaunt.dev/maintainable-sql-query-building-with-golang</guid><category><![CDATA[golang]]></category><category><![CDATA[SQL]]></category><category><![CDATA[Query]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Jeff Simpson]]></dc:creator><pubDate>Thu, 15 Aug 2024 15:00:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722370390987/7b15f3f2-202a-48b2-af88-e649d45b96a5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Any application working with SQL queries can benefit from using a query builder to improve code readability, maintainability, and security. In fact, there are many different libraries that do just that in Golang. Here at Vaunt, we tried many different options before finally deciding to create one ourselves. Ultimately, we wanted something that was secure and provided variable replacement to prevent SQL injection while still being readable and able to have conditional statements. So we created a new library called tqla, released and announced late last year. You can read more about it in <a target="_blank" href="https://blog.vaunt.dev/dynamic-sql-template-with-golang">this article</a>.</p>
<p>Before we built tqla, we mainly used <a target="_blank" href="https://github.com/Masterminds/squirrel">Squirrel</a> for our SQL query building logic—and we highly recommend it. We still use Squirrel in some areas but have gradually started replacing and implementing new query building logic with tqla. We have found many instances where tqla has improved our ability to maintain our code and fix problems we ran into when using other statement builders.</p>
<h1 id="heading-real-world-use-case">Real World Use Case</h1>
<p>At Vaunt, we recently underwent a database migration from CockroachDB to TiDB. While CockroachDB was performant and reliable, we ultimately faced the decision of adding to our techstack to support an OLAP database. The need for this was to support our analytical workload on our <a target="_blank" href="https://community.vaunt.dev">open source community insight</a> product. To keep our technology footprint small, we decided to move forward with TiDB and take advantage of the database’s HTAP architecture. </p>
<p>CockroachDB is largely compatible with PostgreSQL, and we used the PostgreSQL syntax for many of our SQL queries. To switch to TiDB, we had to change a few of our tables and update queries to use MySQL syntax. In a few locations during the migration, we found that we were improperly using conditional query building statements and lacked the proper tests to catch that the statements were being generated incorrectly.</p>
<h2 id="heading-demonstration">Demonstration</h2>
<p>In Squirrel’s <a target="_blank" href="https://github.com/Masterminds/squirrel">README</a>, there is an example of how you can use conditional query building to update statements with optional filters:</p>
<pre><code class="lang-go"><span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(q) &gt; <span class="hljs-number">0</span> {
    users = users.Where(<span class="hljs-string">"name LIKE ?"</span>, fmt.Sprint(<span class="hljs-string">"%"</span>, q, <span class="hljs-string">"%"</span>))
}
</code></pre>
<p>Here is a real, but simplified, example of how we updated one of our queries to conditionally join tables and add an optional filter:</p>
<pre><code class="lang-go">psql := squirrel.StatementBuilder.PlaceholderFormat(squirrel.Question)

statementBuilder := psql.Select(<span class="hljs-string">`i.id`</span>).
From(<span class="hljs-string">"vaunt.installations i"</span>).
Where(<span class="hljs-string">`entity_name = ?`</span>, name)

<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(provider) &gt; <span class="hljs-number">0</span> {
    statementBuilder.Where(<span class="hljs-string">`provider = ?`</span>, provider)
}

<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(repo) &gt; <span class="hljs-number">0</span> {
    statementBuilder.Join(<span class="hljs-string">`repositories as r on JSON_CONTAINS(i.repositories, CONCAT('["', r.id, '"]'))`</span>)
    statementBuilder.Where(<span class="hljs-string">`r.name = ?`</span>, repo)
}
</code></pre>
<p>Can you spot the issue with the code? If not, don’t worry—it is something that slipped through our own code reviews as well until we ran our tests. </p>
<p>The issue here is that we forgot to update the statement builder with the result of the builder functions. For example, the provider condition filter should instead read:</p>
<pre><code class="lang-go"><span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(provider) &gt; <span class="hljs-number">0</span> {
    statementBuilder = statementBuilder.Where(<span class="hljs-string">`provider = ?`</span>, provider)
}
</code></pre>
<p>This is a relatively simple mistake to make and can easily be caught with sufficient test cases, but because it’s not technically invalid code, it can take a bit to realize what is happening immediately.  </p>
<p>Another readability issue with this setup is that the conditional join is separated from the initial select statement. We could reorganize the builder to put each piece where it should go, but it would require multiple duplicate conditional statement checks and still suffer from some readability issues.</p>
<h2 id="heading-using-tqla">Using tqla</h2>
<p>The above demonstration using Squirrel has since been rewritten, and the equivalent in tqla looks like this:</p>
<pre><code class="lang-go">t, err := tqla.New(tqla.WithPlaceHolder(tqla.Question))
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
}

query, args, err := t.Compile(<span class="hljs-string">`
    SELECT i.id
    FROM vaunt.installations as i
    {{ if .Repo }}
    JOIN vaunt.repositories as r on JSON_CONTAINS(i.repositories, CONCAT('["', r.id, '"]'), '$')
    {{ end }}
    WHERE entity_name = {{ .Name}}
    {{ if .Provider }}
    AND i.provider = {{ .Provider }}
    {{ end }}
    {{ if .Repo }}
    AND r.name = {{ .Repo }}
    {{ end }}
    `</span>, data)
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
}
</code></pre>
<p>As you can see, the template syntax for tqla makes incorporating conditional clauses very simple. Tqla automatically replaces the variables we are setting with our specified placeholders and provides the arguments we can use with our sql driver to execute the statement.  </p>
<p>Similar to Squirrel, this statement building approach is easy to test, as we can create different sets of data objects to pass to the template builder and validate the output.  </p>
<p>You can see that we are easily able to add conditional pieces of the query where they would fit in best. For example, here we have a conditional <code>JOIN</code> directly after the <code>FROM</code> statement—and although we still have multiple condition checks, it does not overly complicate the template.</p>
<h1 id="heading-custom-functions">Custom Functions</h1>
<p>Another nice tqla feature helping to improve the maintainability of our sql builders is the ability to define custom functions we could use in the templates to abstract some transformation logic.</p>
<p>Here is an example of how we used a function to convert the Golang’s <code>time.Time</code> value into a <code>sql.NullTime</code> to allow us to do an insert with our data objects without needing to convert it beforehand:</p>
<pre><code class="lang-go">funcs := template.FuncMap{
    <span class="hljs-string">"time"</span>: <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">(t time.Time)</span> <span class="hljs-title">sql</span>.<span class="hljs-title">NullTime</span></span> {
        <span class="hljs-keyword">if</span> t.IsZero() {
            <span class="hljs-keyword">return</span> sql.NullTime{Valid: <span class="hljs-literal">false</span>}
        }
        <span class="hljs-keyword">return</span> sql.NullTime{Time: t, Valid: <span class="hljs-literal">true</span>}
    },
}

t, err := tqla.New(tqla.WithPlaceHolder(tqla.Question), tqla.WithFuncMap(funcs))
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> err
}
</code></pre>
<p>With this function defined in our tqla funcs map, we can now freely use it in our query templates by providing it a parameter from the data object that is a time.Time field. We can even call this function multiple times in the same template with different fields.</p>
<p>Here is a simplified example:</p>
<pre><code class="lang-go">statement, args, err := t.Compile(<span class="hljs-string">`
    INSERT INTO events
        (name, created_at, merged_at, closed_at)
    VALUES ( 
        {{ .Name }},
        {{ time .CreatedAt }},
        {{ time .MergedAt }},
        {{ time .ClosedAt }}
    )`</span>, eventData)
</code></pre>
<h1 id="heading-conclusion">Conclusion</h1>
<p>In conclusion, we believe that using tqla can help improve the maintainability of query building logic while offering some powerful utility for creating dynamic queries. The simplicity of the template structure allows for clean code readability and can make it faster to debug any potential errors.  </p>
<p>We made tqla open source to share this library in hopes that it provides a good option for other users wanting a simple, maintainable, and secure way to build sql queries in many different types of applications.  </p>
<p>If you are interested, please check out the <a target="_blank" href="https://github.com/VauntDev/tqla">repository</a> and give it a star if it helps you in any way. Feel free to make any feature requests or bug reports!</p>
<p>We are always open to receiving feedback and contributions.</p>
<p>To stay in the loop on future development, follow us on <a target="_blank" href="https://x.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.com/invite/mn29Xkvry2">Discord</a>!</p>
]]></content:encoded></item><item><title><![CDATA[GitHub for Beginners: A Step-by-Step Guide]]></title><description><![CDATA[Welcome to the world of GitHub, the premier platform for version control and collaborative software development! Whether you’re a budding programmer or a seasoned developer looking to enhance your workflow, mastering GitHub is a crucial step in your ...]]></description><link>https://blog.vaunt.dev/github-for-beginners-a-step-by-step-guide</link><guid isPermaLink="true">https://blog.vaunt.dev/github-for-beginners-a-step-by-step-guide</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[Programming Tips]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Developer]]></category><category><![CDATA[newbie]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Ayushi]]></dc:creator><pubDate>Tue, 13 Aug 2024 15:25:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1721427663822/f3ae6904-72bb-4e1e-baaa-7df2e8e8e0cc.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the world of GitHub, the premier platform for version control and collaborative software development! Whether you’re a budding programmer or a seasoned developer looking to enhance your workflow, mastering GitHub is a crucial step in your journey. This guide offers some key must-know tips and tricks to help you navigate GitHub confidently and efficiently.</p>
<h2 id="heading-1-learn-basic-git-commands">1. Learn Basic Git Commands</h2>
<p>git init: Initialize a new Git repository</p>
<p>git clone URL: Clone an existing repository from a URL</p>
<p>git add . : Stage all changes for commit</p>
<p>git commit -m “Message”: Commit changes with a message</p>
<p>git push: Push changes to the remote repository</p>
<p>git pull: Fetch and merge changes from the remote repository</p>
<h2 id="heading-2-understand-branching-and-merging">2. Understand Branching and Merging</h2>
<p>Branching allows you to work on different features or bug fixes independently.</p>
<p>Merging integrates changes from different branches. Use <strong>git merge</strong> to combine the branches.</p>
<p>git branch new-feature: Create a new branch named “new-feature”</p>
<p>git checkout new-feature: Switch to the “new-feature” branch</p>
<p>git merge new-feature: Merge the “new-feature” branch into the current branch</p>
<h2 id="heading-3-utilize-github-issues-and-pull-requests">3. Utilize GitHub Issues and Pull Requests</h2>
<p>GitHub Issues are great for tracking bugs, enhancements, and tasks. Create issues to discuss and plan your work.</p>
<p>Pull Requests (PRs) are essential for code reviews and collaboration. Open PRs to propose changes and get feedback before merging them into the main branch.</p>
<h3 id="heading-example-actions">Example Actions</h3>
<ul>
<li><p>Create an issue: Navigate to the “Issues” tab in your repository and click “New Issue”</p>
</li>
<li><p>Open a pull request: After pushing a branch, navigate to the “Pull Requests” tab and click “New Pull Request”</p>
</li>
</ul>
<h2 id="heading-4-write-clear-commit-messages">4. Write Clear Commit Messages</h2>
<p>Clear and concise commit messages are essential for any developer using Git. They not only explain the purpose of your changes (e.g., “Fix bug in login module”) but also serve as a historical record for future reference. A good commit message should be informative and easy to understand for anyone reading the codebase. You can learn more here: <a target="_blank" href="https://www.conventionalcommits.org/en/v1.0.0/">https://www.conventionalcommits.org/en/v1.0.0/</a>.</p>
<h2 id="heading-5-leverage-github-pages-for-documentation">5. Leverage GitHub Pages for Documentation</h2>
<p>GitHub Pages is a free service to host your project’s documentation or a personal site directly from a GitHub repository. To set it up, create a repository named <code>username.github.io</code>, or enable Pages from the repository settings and choose a branch to serve the site. <a target="_blank" href="http://username">Learn more here.</a></p>
<h1 id="heading-writing-a-stunning-github-profile-readme">Writing a Stunning GitHub Profile README</h1>
<p>Creating an attractive and informative GitHub profile README is the first step toward making a lasting impression. It’s your digital business card, a snapshot of who you are as a developer. Here are some tips and tricks to help you design a GitHub profile README that stands out.</p>
<h2 id="heading-1-set-up-github-readme">1. Set Up GitHub README</h2>
<p>To set up a GitHub profile README, simply create a new repository with the same name as your GitHub username. For instance, if your GitHub username is “YourName,” make a repository named “YourName.” Then, create a <code>README.md</code> file in that repository. Whatever you put in this <code>README.md</code> file appears on your GitHub profile. <a target="_blank" href="https://youtu.be/QzPjOk0aR0U?feature=shared&amp;t=40">Watch how to do it here.</a></p>
<h2 id="heading-2-personal-introduction">2. Personal Introduction</h2>
<p>Start with a brief personal introduction. Tell the visitors who you are, what you do, and what you are passionate about. This section should be engaging and offer a glimpse of your personality.</p>
<h2 id="heading-3-include-social-media-profiles">3. Include Social Media Profiles</h2>
<p>If you’re comfortable sharing, include links to your LinkedIn, Twitter, or personal blog. This enables others to connect with you on multiple platforms and understand more about your professional persona.</p>
<h2 id="heading-4-embed-vaunts-svg-cards">4. Embed Vaunt’s SVG Cards</h2>
<p>Vaunt, a tool designed for developers, provides embeddable SVG cards that display your GitHub contribution stats. These cards add a visual element to your profile, making it more engaging and professional.</p>
<p>You can simply add the following lines and replace <code>{{github_username}}</code> with your username to your README.</p>
<pre><code class="lang-yaml"><span class="hljs-string">&lt;p&gt;</span>
   <span class="hljs-string">&lt;a</span> <span class="hljs-string">href="https://vaunt.dev"&gt;</span>
       <span class="hljs-string">&lt;img</span> <span class="hljs-string">src="https://api.vaunt.dev/v1/github/entities/{{github_username}}/contributions?format=svg"</span> <span class="hljs-string">width="350"</span> <span class="hljs-string">title="Includes</span> <span class="hljs-string">public</span> <span class="hljs-string">contributions"/&gt;</span>
   <span class="hljs-string">&lt;/a&gt;</span>
<span class="hljs-string">&lt;/p&gt;</span>
</code></pre>
<h2 id="heading-5-showcase-your-skills">5. Showcase Your Skills</h2>
<p>Your GitHub profile is the perfect place to highlight your technical skills. List down the programming languages, tools, and technologies you are proficient in. Consider using a service like <a target="_blank" href="https://devicon.dev/">Devicon</a> to add visually appealing icons representing your skills to your profile. This can help potential employers or collaborators quickly understand your areas of expertise.</p>
<h2 id="heading-6-highlight-your-projects">6. Highlight Your Projects</h2>
<p>Your projects are the best representation of your skills. Include a section where you showcase your most impressive or relevant projects. Utilize GitHub’s pinning feature to prioritize your most impactful projects. Learn more <a target="_blank" href="https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/pinning-items-to-your-profile">here</a>.</p>
<h2 id="heading-7-add-a-personal-touch">7. Add a Personal Touch</h2>
<p>Remember to add a personal touch to your profile. Share your interests, hobbies, or fun facts about yourself. This helps to humanize your profile and invites visitors to connect with you on a personal level.</p>
<h2 id="heading-8-share-examples">8. Share Examples</h2>
<p>Here are some examples of stunning GitHub profile READMEs for inspiration: <a target="_blank" href="https://zzetao.github.io/awesome-github-profile/">https://zzetao.github.io/awesome-github-profile/</a></p>
<h2 id="heading-9-proofread">9. Proofread</h2>
<p>Lastly, proofread your README. Ensure that it’s free from typos and grammatical errors. A well-written README reflects your attention to detail and commitment to quality.</p>
<h2 id="heading-keep-it-updated">Keep It Updated</h2>
<p>Remember, your GitHub profile README should be a living document. Keep it updated with your latest projects, achievements, and skills.</p>
<p>Creating an attractive GitHub profile README requires creativity, clarity, and a bit of personality. Remember, it’s not just about listing your skills or projects; it’s also about telling your story as a developer. So start creating a stunning GitHub profile README today, and make a lasting impression on everyone who visits your profile.</p>
<h1 id="heading-leverage-vaunt-to-enhance-your-open-source-projects">Leverage Vaunt to Enhance Your Open-Source Projects</h1>
<h2 id="heading-1-recognize-developer-achievements">1. Recognize Developer Achievements</h2>
<p>Vaunt highlights individual accomplishments, from code commits to issue resolutions, providing a sense of recognition and achievement.</p>
<h3 id="heading-how-to-use-vaunt-for-recognition">How to Use Vaunt for Recognition</h3>
<ul>
<li><p><strong>Badges and Awards</strong>: Assign badges for milestones such as first commit, bug fixes, or documentation improvements</p>
</li>
<li><p><strong>Leaderboard</strong>: Maintain a leaderboard showcasing top contributors, fostering a healthy competitive spirit</p>
</li>
</ul>
<h2 id="heading-2-drive-user-contributions">2. Drive User Contributions</h2>
<p>Sustaining an open-source project requires regular and meaningful contributions. Vaunt helps streamline this process by making it easier for users to see where their efforts are most needed.</p>
<h3 id="heading-how-to-drive-contributions">How to Drive Contributions</h3>
<ul>
<li><p><strong>Contribution Guidelines</strong>: Use Vaunt to highlight clear contribution guidelines, making it easy for newcomers to get started</p>
</li>
<li><p><strong>Task Prioritization</strong>: Identify and display high-priority tasks or issues that need immediate attention</p>
</li>
</ul>
<h2 id="heading-3-enhance-community-engagement">3. Enhance Community Engagement</h2>
<p>Active community engagement is the backbone of successful open-source projects. Vaunt offers tools to keep the community engaged and involved.</p>
<h3 id="heading-engagement-strategies-with-vaunt">Engagement Strategies With Vaunt</h3>
<ul>
<li><p><strong>Community Events</strong>: Organize and promote events like hackathons or coding sprints directly through Vaunt</p>
</li>
<li><p><strong>Discussion Forums</strong>: Foster active discussions by integrating forums where contributors can share ideas and collaborate</p>
</li>
</ul>
<p>Learn more about how to start with Vaunt <a target="_blank" href="https://docs.vaunt.dev/">here</a>.</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev"><strong>X</strong></a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2"><strong>Discord</strong></a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Level Up Your Contribution Guidelines]]></title><description><![CDATA[Tech writers are the unsung heroes of open-source projects, meticulously crafting the roadmaps that guide contributions toward success. The creation of contributing guidelines is just the beginning; the true challenge lies in ensuring that these care...]]></description><link>https://blog.vaunt.dev/level-up-your-contribution-guidelines</link><guid isPermaLink="true">https://blog.vaunt.dev/level-up-your-contribution-guidelines</guid><category><![CDATA[Technical writing ]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[YAML]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 04 Jun 2024 13:00:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716487372905/a1a76952-be49-41dd-a0e0-821bd3c43712.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tech writers are the unsung heroes of open-source projects, meticulously crafting the roadmaps that guide contributions toward success. The creation of contributing guidelines is just the beginning; the true challenge lies in ensuring that these carefully curated instructions are followed. How can tech writers confirm that developers are adhering to the guidelines they’ve so thoughtfully composed?</p>
<p>Enter Vaunt, the beacon for tech writers in the open-source sea. Vaunt breathes life into static <code>contributing.md</code> files, transforming them into dynamic, interactive, and trackable components of open-source projects. With Vaunt, tech writers have a robust solution at their fingertips to codify their contribution guidelines and gain valuable insights into developer behavior through gamification elements. Let’s delve into how Vaunt revolutionizes the way we think about contribution guidelines.</p>
<h1 id="heading-1-codify-contributing-guidelines">1. Codify Contributing Guidelines</h1>
<p>Vaunt enables you to transform your <code>contributing.md</code> file into a structured, interactive format. Instead of static text, you can:</p>
<ul>
<li><p><strong>Create clear steps:</strong> Break down contribution processes into clear, actionable steps that developers can easily follow.</p>
</li>
<li><p><strong>Define contribution types:</strong> Differentiate various types of contributions, such as bug fixes, feature enhancements, and documentation improvements.</p>
</li>
<li><p><strong>Set expectations:</strong> Clearly outline the expectations for code quality, formatting, and testing procedures.</p>
</li>
</ul>
<p>This codified format makes your contributing guidelines more user-friendly and ensures that developers have a clear understanding of what’s required.</p>
<h1 id="heading-2-track-contribution-activity">2. Track Contribution Activity</h1>
<p>Vaunt goes beyond simply presenting the guidelines. It actively tracks how developers interact with them, incorporating gamification elements to enhance engagement so you can:</p>
<ul>
<li><p><strong>Identify common issues:</strong> Analyze developer activity to see which parts of the contributing guidelines are frequently overlooked or misunderstood.</p>
</li>
<li><p><strong>Monitor contribution types:</strong> Gain insights into the types of contributions developers are making, allowing you to identify areas that need more focus or support.</p>
</li>
</ul>
<p>By analyzing this data, tech writers can:</p>
<ul>
<li><p><strong>Refine contributing guidelines:</strong> Identify areas for improvement and update the guidelines to address common issues or confusion.</p>
</li>
<li><p><strong>Provide targeted support:</strong> Focus their efforts on areas where developers need more guidance or clarification.</p>
</li>
<li><p><strong>Demonstrate the impact of their work:</strong> Showcase the value of clear contributing guidelines in ensuring project quality and efficiency.</p>
</li>
</ul>
<h1 id="heading-3-foster-a-collaborative-community-with-gamification">3. Foster a Collaborative Community with Gamification</h1>
<p>Vaunt fosters a collaborative environment by:</p>
<ul>
<li><p><strong>Encouraging open communication:</strong> Developers can easily ask questions and clarify doubts directly within the codified guidelines, promoting open communication with maintainers.</p>
</li>
<li><p><strong>Providing recognition:</strong> Vaunt allows you to create custom badges to recognize developers for their diligence in following the <code>Contributing.md</code> file.</p>
</li>
<li><p><strong>Gamification elements:</strong> Vaunt incorporates additional gamification elements, such as leaderboards, points systems, and community boards, to further incentivize participation and make contributing a more engaging experience.</p>
</li>
</ul>
<h1 id="heading-real-world-example-codifying-our-own-contributingmd-file">Real-World Example: Codifying Our Own <code>Contributing.md</code> File</h1>
<p>Here’s an example of how we codified our <code>contributing.md</code> file using Vaunt:</p>
<h2 id="heading-creating-achievement">Creating Achievement</h2>
<p>First, we utilized <a target="_blank" href="https://generator.contributing.md/">Contributing.md generator</a> to start our documentation—but we didn’t stop there. Next, we customized the documentation, codifying our <a target="_blank" href="https://github.com/VauntDev/tqla/blob/main/.github/CONTRIBUTING.md#earn-badges">contributing.md file</a> by adding these three achievements:</p>
<p><strong>Star the Repo 🌟</strong></p>
<p>Earn the Mas Tqla badge by starring Tqla. It’s a simple yet powerful way to support our project.</p>
<p><strong>Report a Bug 🐛</strong></p>
<p>Spot a bug? Add a bug label to your issue report. Once confirmed, you’ll be awarded the Bug Hunter badge as a thank you for keeping Tqla robust.</p>
<p><strong>Suggest an Enhancement ⚡</strong></p>
<p>Have a feature in mind? Label your enhancement suggestion with enhancement. If we implement it, you’ll receive the Innovator badge for your visionary input.</p>
<h2 id="heading-automatic-badge-awards">Automatic Badge Awards</h2>
<p>Secondly, we configure Vaunt achievements to track your impact and award developers’ contributions. Our system automatically awards developers who reach those achievements.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">version:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.1</span> 
<span class="hljs-attr">achievements:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">Mas</span> <span class="hljs-string">Tqla!</span>
      <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/mas_tqla.png</span>
      <span class="hljs-attr">description:</span> <span class="hljs-string">uno</span> <span class="hljs-string">mas,</span> <span class="hljs-string">dba...,</span> <span class="hljs-string">one</span> <span class="hljs-string">more,</span> <span class="hljs-string">mas</span> <span class="hljs-string">tqla!</span>   
      <span class="hljs-attr">triggers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
            <span class="hljs-attr">actor:</span> <span class="hljs-string">author</span>
            <span class="hljs-attr">action:</span> <span class="hljs-string">star</span>
            <span class="hljs-attr">condition:</span> <span class="hljs-string">starred</span> <span class="hljs-string">=</span> <span class="hljs-literal">true</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span> 
      <span class="hljs-attr">name:</span> <span class="hljs-string">Tqla</span> <span class="hljs-string">Honey</span> <span class="hljs-string">Bee</span>
      <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/tqla_honey_bee.png</span>
      <span class="hljs-attr">description:</span> <span class="hljs-string">We</span> <span class="hljs-string">bee-lieve</span> <span class="hljs-string">in</span> <span class="hljs-string">you!</span> <span class="hljs-string">This</span> <span class="hljs-string">achievement</span> <span class="hljs-string">celebrates</span> <span class="hljs-string">your</span> <span class="hljs-string">first</span> <span class="hljs-string">bug</span> <span class="hljs-string">report,</span> <span class="hljs-string">helping</span> <span class="hljs-string">make</span> <span class="hljs-string">Tqla</span> <span class="hljs-string">sweeter</span> <span class="hljs-string">than</span> <span class="hljs-string">ever.</span>
      <span class="hljs-attr">triggers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
            <span class="hljs-attr">actor:</span> <span class="hljs-string">author</span>
            <span class="hljs-attr">action:</span> <span class="hljs-string">issue</span>
            <span class="hljs-attr">condition:</span> <span class="hljs-string">labels</span> <span class="hljs-string">in</span> [<span class="hljs-string">'bug'</span>] <span class="hljs-string">&amp;</span> <span class="hljs-string">reactors</span> <span class="hljs-string">in</span> [<span class="hljs-string">'elewis787'</span>, <span class="hljs-string">'jeff10110322'</span>, <span class="hljs-string">'simonmazzaroth'</span>]
    <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span> 
      <span class="hljs-attr">name:</span> <span class="hljs-string">Mojito</span> <span class="hljs-string">Tqla</span>
      <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/mojito_tqla.png</span>
      <span class="hljs-attr">description:</span> <span class="hljs-string">Your</span> <span class="hljs-string">enhancement's</span> <span class="hljs-string">a</span> <span class="hljs-string">delight!</span> <span class="hljs-string">Thanks</span> <span class="hljs-string">for</span> <span class="hljs-string">making</span> <span class="hljs-string">Tqla</span> <span class="hljs-string">even</span> <span class="hljs-string">brighter</span> <span class="hljs-string">than</span> <span class="hljs-string">night.</span>
      <span class="hljs-attr">triggers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
            <span class="hljs-attr">actor:</span> <span class="hljs-string">author</span>
            <span class="hljs-attr">action:</span> <span class="hljs-string">issue</span>
            <span class="hljs-attr">condition:</span> <span class="hljs-string">labels</span> <span class="hljs-string">in</span> [<span class="hljs-string">'enhancement'</span>] <span class="hljs-string">&amp;</span> <span class="hljs-string">reactors</span> <span class="hljs-string">in</span> [<span class="hljs-string">'elewis787'</span>, <span class="hljs-string">'jeff10110322'</span>, <span class="hljs-string">'simonmazzaroth'</span>]
</code></pre>
<p>The above example can be found in our <a target="_blank" href="https://github.com/VauntDev/tqla/blob/main/.vaunt/config.yaml">TQLA repository</a>. You can also learn more about how to set up your own <a target="_blank" href="https://blog.vaunt.dev/vauntdev-blasts-off#heading-custom-achievements">achievements</a>.</p>
<h2 id="heading-community-boards">Community Boards</h2>
<p>Third, we utilize <a target="_blank" href="https://blog.vaunt.dev/community-boards">Vaunt Community Boards</a> to provide community statistics, repository insights, and a view into repository achievements.</p>
<p>Vaunt Community Boards provide a powerful platform for:</p>
<ul>
<li><p><strong>Tracking project growth:</strong> Monitor key metrics like commits, issues closed, and stars to gauge the overall health and popularity of your open-source project.</p>
</li>
<li><p><strong>Identifying community trends:</strong> Gain insights into developer behavior and contribution patterns to understand how your community is evolving.</p>
</li>
<li><p><strong>Showcasing individual contributions:</strong> Recognize and celebrate the contributions of individual developers and teams through achievements and leaderboards.</p>
</li>
</ul>
<p><a target="_blank" href="https://community.vaunt.dev/board/VauntDev/repository/tqla"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716567960491/7b2e2f0d-0289-482e-84fe-a05d6ea7fd29.png" alt="Vaunt Community Board - TQLA" class="image--center mx-auto" /></a></p>
<p><a target="_blank" href="https://community.vaunt.dev/board/VauntDev/repository/tqla">https://community.vaunt.dev/board/VauntDev/repository/tqla</a></p>
<p>In a nutshell, Vaunt is revolutionizing the way tech writers support and interact with open-source communities. By turning static guidelines into dynamic tools for collaboration, encouraging engagement through gamification, and providing a platform for recognition, Vaunt ensures that the expertise of tech writers doesn’t just inform—it also inspires and transforms. Dive into the future of open-source contribution with Vaunt, where every guideline is a gateway to greater impact and every contribution is an opportunity for celebration.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Hacktoberfest 2024 Preparation Guide]]></title><description><![CDATA[As summer approaches and the tech world heats up, anticipation is building for Hacktoberfest 2024! This month-long celebration is a vibrant festival dedicated to open-source community engagement and the incredible contributions of developers. Eager t...]]></description><link>https://blog.vaunt.dev/hacktoberfest-2024-preparation-guide</link><guid isPermaLink="true">https://blog.vaunt.dev/hacktoberfest-2024-preparation-guide</guid><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Developer]]></category><category><![CDATA[devtools]]></category><category><![CDATA[DevRel]]></category><category><![CDATA[community]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 07 May 2024 12:00:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715012324177/e4439147-0f4b-45d5-ac71-27495e7822fd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As summer approaches and the tech world heats up, anticipation is building for Hacktoberfest 2024! This month-long celebration is a vibrant festival dedicated to open-source community engagement and the incredible contributions of developers. Eager to enhance your Hacktoberfest involvement? This preparation guide is your key to making it the most successful and engaging year yet. Discover how Vaunt, a pioneering developer recognition platform, can boost developer engagement threefold and enrich your community with support, recognition, and inspiration.</p>
<h1 id="heading-why-hacktoberfest-matters">Why Hacktoberfest Matters</h1>
<p>Hacktoberfest is more than just coding; it’s the epitome of community, collaboration, and mutual growth—hallmarks of open-source community management. This is a time when experienced and novice contributors unite to enhance each other’s work, learn, and progress together. Hacktoberfest provides organizations with a unique opportunity to network with international developers and promote contributions to the open-source cause.</p>
<h1 id="heading-getting-your-organization-ready">Getting Your Organization Ready</h1>
<ol>
<li><p><strong>Set clear contribution guidelines:</strong> Spruce up your project’s documentation with crystal-clear contribution guidelines—a fundamental Hacktoberfest best practice. This empowers new contributors with the knowledge needed to begin their journey, submit changes, and understand what types of contributions are welcomed.</p>
</li>
<li><p><strong>Tag issues with “Hacktoberfest”:</strong> Mark actionable issues with a Hacktoberfest label, steering participants toward well-defined, green-lit tasks and aligning with open-source community engagement strategies.</p>
</li>
<li><p><strong>Prepare beginner-friendly issues:</strong> Curate a list of beginner-friendly tasks, earmarked with tags like “good-first-issue” or “Hacktoberfest-beginner,” to help those unfamiliar with the open-source realm find suitable challenges. Crafting engaging, rewarding, and comprehensible introductory issues is crucial to maintaining an inclusive and vibrant open-source environment.</p>
</li>
<li><p><strong>Prepare mentors:</strong> Deploy a cadre of skilled contributors ready to mentor and ensure newbies get the guidance and encouragement they need— fostering a nurturing and mentoring atmosphere.</p>
</li>
<li><p><strong>Plan events and workshops:</strong> Initiate kickoff events, workshops, or webinars as engaging touchpoints for interaction and collaboration—bolstering open-source community management and participation.</p>
</li>
<li><p><strong>Promote your participation:</strong> Spread the news about your Hacktoberfest activities across diverse mediums—social media, newsletters, blogs, and tech community forums. Publish teaser posts, regular updates, past triumphs, and future expectations, heightening anticipation and involvement by using tags like #Hacktoberfest2024.</p>
</li>
</ol>
<h1 id="heading-introducing-vauntyour-hacktoberfest-ally">Introducing Vaunt—Your Hacktoberfest Ally</h1>
<p>As we share insights on how to prepare for Hacktoberfest, let’s take a moment to introduce Vaunt, your best Hacktoberfest ally. Vaunt is a top developer-endorsed platform. During Hacktoberfest 2023, we <a target="_blank" href="https://blog.vaunt.dev/keploy-leverages-vaunt-to-celebrate-developer-contributions">tripled partner engagement and built a vibrant collaborative community</a> 🚀.</p>
<ol>
<li><p><strong>Recognize contributions with digital achievements:</strong> Work with Vaunt to create your own custom digital badges to recognize developer contributions—symbolic recognition that boosts motivation and integrates gamification into the open-source experience.</p>
</li>
<li><p><strong>Utilize engagement analytics:</strong> Leverage Vaunt’s sophisticated tools to track and audit community engagement, revealing the most engaged contributors and dynamics within your community—an exercise in strategic open-source community management.</p>
</li>
<li><p><strong>Leverage seamless integration:</strong> Rely on Vaunt’s streamlined integration for hassle-free operations alongside your existing systems, ensuring that contributors seamlessly gain the recognition they’ve earned.</p>
</li>
<li><p><strong>Capture the community spirit with Vaunt:</strong> Easily share success stories, highlight outstanding contributions, and celebrate community efforts with Vaunt—the embodiment of a vibrant and appreciated community culture.</p>
</li>
</ol>
<h1 id="heading-impact-and-looking-forward">Impact and Looking Forward</h1>
<p>As Hacktoberfest unfolds, watch your community engagement soar with the support of Vaunt. Witness the increased motivation, stronger connections, and inclusive environment where every contribution is acknowledged. <a target="_blank" href="https://blog.vaunt.dev/keploy-leverages-vaunt-to-celebrate-developer-contributions">Take a look at our case study</a> and get ready to take your first step into a more meaningful Hacktoberfest.</p>
<p>Let Vaunt help your organization navigate through the open-source festivities with ease. Recognize, engage, and inspire your developers in new and exciting ways. Visit <a target="_blank" href="https://www.vaunt.dev/">our website</a> to discover more about how Vaunt can revolutionize your developer relations.</p>
]]></content:encoded></item><item><title><![CDATA[Unlocking Developer Engagement: The Open-Source Community Playbook]]></title><description><![CDATA[Attention developer and community builder!
Do you dream of building a thriving open-source community that fuels innovation and fosters collaboration? Stop struggling with fragmented contributions, unwelcoming environments, and unacknowledged efforts....]]></description><link>https://blog.vaunt.dev/unlocking-developer-engagement-the-open-source-community-playbook</link><guid isPermaLink="true">https://blog.vaunt.dev/unlocking-developer-engagement-the-open-source-community-playbook</guid><category><![CDATA[Open Source]]></category><category><![CDATA[community]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Startups]]></category><category><![CDATA[DevRel]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 23 Apr 2024 12:00:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713808895320/2e57366a-7cd8-4c21-9d35-a124fdf3f376.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Attention developer and community builder!</strong></p>
<p>Do you dream of building a thriving open-source community that fuels innovation and fosters collaboration? Stop struggling with fragmented contributions, unwelcoming environments, and unacknowledged efforts. Building a thriving open-source community is just an exciting journey away, paved with the right strategies, empathy, and tools.</p>
<p>In this comprehensive guide, we’ll explore the essential ingredients for cultivating a vibrant community of contributors, fostering innovation, and celebrating shared success. From creating a welcoming atmosphere to establishing clear contribution pathways, we’ll delve into actionable tips and best practices sure to empower your project.</p>
<h1 id="heading-building-a-thriving-open-source-community-the-power-of-a-welcoming-environment">Building a Thriving Open-Source Community: The Power of a Welcoming Environment 🚀</h1>
<p>🌟 In the vibrant world of open source, the strength of a community is pivotal to a project’s success. Here are two fundamental steps to create a welcoming and inclusive environment:</p>
<ol>
<li><p><strong>Encourage Participation</strong> ✅: Accessibility is key. Clear guidelines = smooth start. Make it effortless for newcomers to join by offering clear guidelines and a supportive atmosphere. Embrace diversity in your community—it’s the melting pot of innovation and creativity!</p>
</li>
<li><p><strong>Foster a Positive Culture</strong> 🌈: Establish a code of conduct that champions respect and inclusivity. Small contributions or large, every effort deserves recognition 🎉. Celebrating each milestone builds a sense of belonging and motivates ongoing participation.</p>
</li>
</ol>
<p>💻 A welcoming community isn’t just about growing numbers; it’s also about nurturing an ecosystem where everyone feels valued and empowered to contribute. Let’s make our open-source communities into places where collaboration, respect, and innovation thrive! 🌟</p>
<h1 id="heading-key-to-open-source-success-establishing-clear-contribution-paths">Key to Open-Source Success: Establishing Clear Contribution Paths 🛣️</h1>
<p>In the dynamic world of open source, providing clear and accessible paths for contributors is crucial for sustained community engagement and project growth. Here are two fundamental ways to enhance the contributor experience:</p>
<ol>
<li><p><strong>Well-Documented Issues</strong> 📋: The first step in orienting new contributors is ensuring that issues are clearly labeled and documented. This not only helps newcomers navigate through your project with ease but also encourages their active participation. A well-organized issue tracker is a sign of a project’s health and contributor-friendliness.</p>
</li>
<li><p><strong>Mentorship Programs</strong> 🤝: Beyond documentation, personal guidance is invaluable. Establishing mentorship programs or offering one-on-one support to new contributors can significantly enhance their experience. It helps them integrate into the community, understand the project’s nuances, and contribute more effectively. Beyond building skills, mentorship fosters lasting relationships within the community.</p>
</li>
</ol>
<p>By focusing on these aspects, we can create open-source environments that are productive, welcoming, and nurturing.</p>
<p>Let’s continue to support and guide the bright minds contributing to the open-source world!</p>
<h1 id="heading-elevating-open-source-communities-the-art-of-recognizing-and-rewarding-contributions">Elevating Open-Source Communities: The Art of Recognizing and Rewarding Contributions 🏅</h1>
<p>In the collaborative world of open source 🤝, recognizing and rewarding contributions is not just a courtesy; it’s a crucial catalyst for community growth and innovation. Here are two key, effective strategies to acknowledge the efforts of your community members:</p>
<ol>
<li><p><strong>Regular Acknowledgment</strong> 👏: Make it a practice to highlight contributions in your community channels regularly. Whether it’s a simple shout-out or feature in your newsletter, acknowledging contributions publicly not only shows appreciation but also motivates others. It’s about creating a culture where every contribution is seen and valued.</p>
</li>
<li><p><strong>Implementing Rewards and Incentives</strong> 🏆: Go a step further by setting up a system of rewards and incentives for significant contributions. This could be anything from digital badges, exclusive access to new features, or even spotlighting contributors in prominent community events. Such incentives celebrate achievements while also driving engagement and inspiring ongoing participation.</p>
</li>
</ol>
<p>By integrating these practices, we foster a vibrant open-source ecosystem 💡 where contributions are not just made but celebrated. Let’s continue to nurture environments where every effort is recognized—and every achievement is a shared victory!</p>
<h1 id="heading-strengthening-open-source-communities-the-power-of-events-and-learning">Strengthening Open-Source Communities: The Power of Events and Learning 🌐</h1>
<p>A thriving open-source community isn’t just about code; it’s about connection and growth. Here are two impactful ways to energize and empower your community:</p>
<ol>
<li><p><strong>Hackathons and Meetups</strong> 🔨: These events are more than just coding marathons; they’re melting pots of collaboration and innovation. Whether it’s a local meetup or an online hackathon, bringing community members together to share ideas and solve problems can spark creativity and forge lasting bonds.</p>
</li>
<li><p><strong>Webinars and Workshops</strong> 📚: Knowledge sharing is a cornerstone of open source. Hosting educational sessions, whether technical workshops or webinars on best practices, not only helps community members develop new skills but also deepens their connection with the project. It’s a way to nurture both individual talents and the collective strength of your community.</p>
</li>
</ol>
<p>Let’s continue to build open-source communities that are not only technically robust but also rich in opportunities for learning, collaboration, and personal growth. 🎉</p>
<h1 id="heading-maximizing-impact-in-open-source-with-social-media-and-content">Maximizing Impact in Open Source With Social Media and Content 📣</h1>
<p>In the digital age, social media and content creation are powerful tools for growing and nurturing open-source communities. Here’s how they can be effectively utilized:</p>
<ol>
<li><p><strong>Social Media Engagement</strong> 🌍: Platforms such as Twitter, LinkedIn, and Reddit aren’t just for updates; they’re stages for celebrating your community’s achievements and engaging with a broader audience. Regular posts about progress, key milestones, and community stories can amplify your project’s visibility and attract new contributors.</p>
</li>
<li><p><strong>Blogs and Articles</strong> ✍️: Beyond social media, creating detailed blogs and articles offers a deeper dive into your project. This content can highlight the hard work and innovative solutions of your community, share valuable insights about your project’s developments, and acknowledge the contributions of key members. It’s not just about sharing information; it’s about telling the story of your community—its challenges, successes, and lessons learned.</p>
</li>
</ol>
<p>By leveraging these platforms, we can create a narrative that both informs and inspires. Engaging content and an active social media presence can transform your open-source project from a repository of code into a vibrant, collaborative community.</p>
<p>Let’s harness the power of digital storytelling to celebrate our open-source journey and connect with fellow enthusiasts across the globe!</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>The journey of building a thriving open-source community is an ongoing adventure, filled with unique challenges and rewarding triumphs. By prioritizing a welcoming environment, well-defined contribution paths, genuine recognition, engaging events, and open communication, you can create a collaborative hub where innovation thrives. And along this journey, remember that you’re not alone.</p>
<p>Vaunt stands as a dedicated partner, offering a <a target="_blank" href="https://vaunt.dev/">toolbox</a> specifically designed to nurture your community’s growth. Whether it’s boosting project visibility, streamlining contributions, or recognizing the invaluable efforts of your members, Vaunt empowers you to cultivate a vibrant ecosystem where collaboration and connection flourish.</p>
<p>Embrace these strategies and tools like Vaunt to transform your open-source project from a repository of code into a vibrant tapestry of engaged minds, pushing the boundaries of possibility together.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">Twitter</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Why We Built Vaunt: Celebrating Developer Achievements in a Meaningful Way]]></title><description><![CDATA[Every developer’s journey is filled with accomplishments, from the worn-out sticker on your laptop to a carefully constructed GitHub profile. These are more than just decorations; they represent countless hours, passion put into projects, and challen...]]></description><link>https://blog.vaunt.dev/why-we-built-vaunt-celebrating-developer-achievements-in-a-meaningful-way</link><guid isPermaLink="true">https://blog.vaunt.dev/why-we-built-vaunt-celebrating-developer-achievements-in-a-meaningful-way</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[community]]></category><category><![CDATA[achievements]]></category><category><![CDATA[digital badges]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 09 Apr 2024 13:00:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1712610149127/b879e633-830e-4856-a8e0-b7994daa7ad2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every developer’s journey is filled with accomplishments, from the worn-out sticker on your laptop to a carefully constructed GitHub profile. These are more than just decorations; they represent countless hours, passion put into projects, and challenges overcome. This love for showcasing achievements inspired the creation of Vaunt.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1712610273369/ece855eb-0379-4b8f-a7f3-a74b69cf4d78.jpeg" alt="Github_Stickers_Vaunt_Dev" class="image--center mx-auto" /></p>
<h2 id="heading-the-spark-of-an-idea-recognition-reimagined">The Spark of an Idea: Recognition Reimagined</h2>
<p>Vaunt was born from a simple question: How do we enable developers and organizations to celebrate and share achievements in a more meaningful and personal way? We’ve seen our thriving developer community create great things, from unique laptop stickers commemorating hackathon wins to customized T-shirts for breakthroughs on major projects. However, there was no unified platform to promote this kind of celebration of professional growth and creativity.</p>
<h2 id="heading-enter-vaunt-a-community-spotlight">Enter Vaunt: A Community Spotlight</h2>
<p>Vaunt is far more than just a software platform; it’s a dedicated space where developer achievements take center stage. It answers the call for a platform where individual contributions, no matter how seemingly small, are recognized and celebrated. With Vaunt, we’re not just building software; we’re crafting a <strong>home for the stories</strong> that shape our journeys as developers.</p>
<h2 id="heading-from-personalized-recognition-to-global-celebration">From Personalized Recognition to Global Celebration</h2>
<p>Vaunt offers a suite of features designed to transform how developers share their successes with the world. This includes:</p>
<ul>
<li><p><strong>Custom achievements:</strong> Organizations can create unique achievements to recognize specific skills or project milestones.</p>
</li>
<li><p><strong>Meaningful badges:</strong> Individual developers can earn badges that celebrate their accomplishments and skill mastery.</p>
</li>
<li><p><strong>Community connections:</strong> Vaunt fosters connections among developers, enabling them to share their stories and inspire each other.</p>
</li>
</ul>
<p>From custom achievements for organizations to badges that celebrate individual milestones, Vaunt aims to transform how developers share their successes with the world. It’s about turning every “What’s that sticker?” moment into a story of achievement, learning, and inspiration.</p>
<h2 id="heading-join-the-movement-celebrate-your-success">Join the Movement: Celebrate Your Success</h2>
<p>Vaunt thrives on the energy of the developer community. Every developer who shares their story, every organization that embraces a culture of recognition, and every discussion that fuels new features contributes to our growth.</p>
<p>We built Vaunt for you, the creators, problem solvers, and innovators who shape the tech landscape. We invite you to join us in celebrating your achievements and those of your fellow developers. Together, let’s make Vaunt a beacon of recognition in the open-source world.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop with future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Keploy Leverages Vaunt to Celebrate Developer Contributions]]></title><description><![CDATA[Customer
Keploy, a cutting-edge API testing platform, faced the challenge of effectively engaging their developer community and showcasing the real-world impact of their contributions. With a mission to simplify API testing through automation and min...]]></description><link>https://blog.vaunt.dev/keploy-leverages-vaunt-to-celebrate-developer-contributions</link><guid isPermaLink="true">https://blog.vaunt.dev/keploy-leverages-vaunt-to-celebrate-developer-contributions</guid><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Developer]]></category><category><![CDATA[community]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Thu, 04 Apr 2024 16:33:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711651444753/f73f1030-b396-49c1-900e-14280942bb10.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-customer">Customer</h1>
<p>Keploy, a cutting-edge API testing platform, faced the challenge of effectively engaging their developer community and showcasing the real-world impact of their contributions. With a mission to simplify API testing through automation and minimize manual effort, Keploy sought innovative ways to acknowledge and motivate their community.</p>
<h1 id="heading-challenge">Challenge</h1>
<p>Despite Keploy’s innovative approach to automating API testing, they had difficulties engaging their rapidly growing developer community and effectively recognizing individual contributions. </p>
<h1 id="heading-solution-collaborative-effort-during-hacktoberfest">Solution: Collaborative Effort During Hacktoberfest</h1>
<p>Keploy and Vaunt collaborated during Hacktoberfest, a month-long celebration of open-source contributions, to spotlight developers who made significant contributions to Keploy’s platform.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=3_5dmLE8Hds">Hacktoberfest #1 - Recognize, Celebrate and Connect open source Developers.</a></p>
<ul>
<li><p><strong>Implementation Process:</strong> Keploy devised a strategy to utilize Vaunt’s unique features, integrating them with Keploy’s Hacktoberfest activities to enhance participant recognition and engagement.</p>
</li>
<li><p><strong>Digital Badges for Contributors:</strong> Custom digital badges were created to acknowledge and reward developers for their contributions during Hacktoberfest, making their achievements visible and shareable. <a target="_blank" href="https://github.com/keploy/keploy/blob/main/.vaunt/config.yml">https://github.com/keploy/keploy/blob/main/.vaunt/config.yml</a></p>
</li>
<li><p><strong>Community Analytics:</strong> Keploy leveraged Vaunt’s analytics to monitor engagement levels and identify active contributors, enabling the team to better understand community dynamics and tailor communications. <a target="_blank" href="https://community.vaunt.dev/board/keploy/repository/keploy">https://community.vaunt.dev/board/keploy/repository/keploy</a></p>
</li>
</ul>
<h1 id="heading-impact">Impact</h1>
<p>6/1/2023–8/31/2023 (Without Vaunt)</p>
<p><img src="https://lh7-us.googleusercontent.com/_pRs05z-l9Xbvufb1Oy3JIyBw7xMWhLJrhbsAFd12-d-eAObz_S9i5FtAcHWfRp6Q5pRpZ-v1DlBKYyAoZLuI80u1CRGKsLgn_WUd2Twysv2Xi0fzX-mgT-kvtE_RGyVCCqXoX8FYW9fHh_IopUPX0Y" alt="Keploy Github Repo Without Vaunt" /></p>
<p>9/1/2023–11/30/2023 (With Vaunt)</p>
<p><img src="https://lh7-us.googleusercontent.com/vE5UFHxO2tmHCLTQHLge4eos_8QVPscYG6YhG4_lJHBtAoEh27TkZDUYLnindXXERQ7oCoQbI7NSGK1OJxlAwWiZisuzmT54WMt6NLs_LnB3agkDDpi0gm5qfLdsjshanR5WkZRtO7Hk7PUQb2nRgms" alt="Keploy Github Repo With Vaunt" /></p>
<p>Source: <a target="_blank" href="https://community.vaunt.dev/board/keploy/repository/keploy">https://community.vaunt.dev/board/keploy/repository/keploy</a></p>
<ul>
<li><p>100% increase in commit quarterly </p>
</li>
<li><p>300% increase in issue opens quarterly </p>
</li>
<li><p>900% increase in issue comments quarterly </p>
</li>
<li><p>100% increase in PR opens quarterly </p>
</li>
<li><p>200% increase in PR comments quarterly </p>
</li>
<li><p>900% increase in review quarterly </p>
</li>
<li><p>100% increase in stars quarterly </p>
</li>
</ul>
<p>“This collaboration not only improved Keploy’s ability to connect with a broader audience but also offered deep insights into the effectiveness of their engagement strategies, setting a new standard in celebrating and motivating open-source contributors.” 
Animesh Pathak, founding DevRel engineer </p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>Keploy’s collaboration with Vaunt transformed their approach to community engagement, turning recognition into a powerful tool for motivation and connection. As Keploy continues to grow, the insights gained from this partnership will guide community strategies, ensuring Keploy’s developer ecosystem remains vibrant and engaged.</p>
<p>For more information about how Vaunt can transform your community engagement, visit <a target="_blank" href="https://www.vaunt.dev/">our website</a> or <a target="_blank" href="https://vaunt.dev/contact-us/">contact us</a> directly.</p>
]]></content:encoded></item><item><title><![CDATA[Beyond Pull Requests: Google Summer of Code (GSoC)]]></title><description><![CDATA[Have you ever bitten into the Hacktoberfest bug, fired up your keyboard, and contributed code to open-source projects? If so, you know the rush of making a tangible impact and joining a vibrant community. But what if you could take your open-source j...]]></description><link>https://blog.vaunt.dev/beyond-pull-requests-google-summer-of-code-gsoc</link><guid isPermaLink="true">https://blog.vaunt.dev/beyond-pull-requests-google-summer-of-code-gsoc</guid><category><![CDATA[Open Source]]></category><category><![CDATA[gsoc]]></category><category><![CDATA[gsoc2024]]></category><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[beginner]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Tue, 26 Mar 2024 13:00:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711142273426/e94d01b6-e69c-4593-b4c8-f02ce4c4490f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have you ever bitten into the Hacktoberfest bug, fired up your keyboard, and contributed code to open-source projects? If so, you know the rush of making a tangible impact and joining a vibrant community. But what if you could take your open-source journey to the next level, deepen your technical skills, and get mentored by industry experts along the way? Enter <a target="_blank" href="https://summerofcode.withgoogle.com/">Google Summer of Code (GSoC)</a>, an epic summer program that takes open-source contribution to a whole new dimension.</p>
<h2 id="heading-think-of-gsoc-as-hacktoberfest-on-steroids">Think of GSoC as Hacktoberfest on Steroids</h2>
<ul>
<li><p><strong>Deeper Impact:</strong> Instead of quick pull requests, you work on a 3-month project, making a significant contribution to a real-world open-source project used by thousands.</p>
</li>
<li><p><strong>Expert Mentorship:</strong> Get personalized guidance and support from experienced developers, honing your skills and gaining invaluable insights.</p>
</li>
<li><p><strong>Network Building:</strong> Connect with a global community of developers, mentors, and organizations, expanding your professional network.</p>
</li>
<li><p><strong>Resume Booster:</strong> Showcase your open-source experience and stand out to potential employers.</p>
</li>
</ul>
<h2 id="heading-gsoc-vs-hacktoberfest-same-spirit-different-depth">GSoC vs. Hacktoberfest: Same Spirit, Different Depth</h2>
<p>Both events celebrate open-source contributions, but their intensity and impact differ:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>Hacktoberfest</strong></td><td><strong>Google Summer of Code (GSoC)</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Project length</strong></td><td>Short pull requests</td><td>3-month focused project</td></tr>
<tr>
<td><strong>Mentorship</strong></td><td>No</td><td>Individual expert mentorship</td></tr>
<tr>
<td><strong>Impact</strong></td><td>Smaller contribution</td><td>Significant code contribution</td></tr>
<tr>
<td><strong>Difficulty</strong></td><td>Beginner-friendly</td><td>Requires experience &amp; dedication</td></tr>
</tbody>
</table>
</div><p>To qualify for Google Summer of Code, contributors must meet several criteria: Contributors must be 18 years or older at the time of registration and either students or new to the open-source community. Additionally, participants must reside in a country not subject to any U.S. embargo.</p>
<p><a target="_blank" href="https://summerofcode.withgoogle.com/terms/contributor">Review contributor terms</a></p>
<h2 id="heading-ready-to-dive-into-gsoc-2024">Ready to Dive Into GSoC 2024?</h2>
<p>Here are the Key Dates to Be Aware Of:</p>
<ul>
<li><p>March 18, 2024 | Contributor proposals open</p>
</li>
<li><p>April 2, 2024 | Proposal deadline</p>
</li>
<li><p>November 14, 2024 | Program ends</p>
</li>
</ul>
<p><a target="_blank" href="https://developers.google.com/open-source/gsoc/timeline">View program timeline</a></p>
<p>Don’t let the application process daunt you. Utilize GSoC’s resources and build relationships with mentors. Remember, the open-source community thrives on collaboration!</p>
<h1 id="heading-organization">Organization</h1>
<p>For organizations, participating in GSoC offers different values compared to Hacktoberfest. While Hacktoberfest encourages quantity with its focus on pull requests, GSoC emphasizes quality through more substantial, focused contributions. Organizations involved in GSoC can expect to engage with students or open-source beginners who are committed to working on a project for several months, offering a chance to mentor new talent and integrate significant improvements or new features into their projects. This deeper level of involvement can lead to more meaningful advancements in the project’s development.</p>
<h3 id="heading-fresh-talent-and-contributions">Fresh Talent and Contributions</h3>
<ul>
<li><p><strong>Access to a pool of talented students and developers:</strong> GSoC attracts a large pool of skilled students eager to contribute to open-source projects. This enables you to tap into new talent and perspectives, potentially leading to valuable contributions to your project.</p>
</li>
<li><p><strong>Improved code quality:</strong> GSoC students are mentored by experienced developers, ensuring that their contributions are well-written, documented, and tested. This can lead to an overall improvement in the quality of your codebase.</p>
</li>
</ul>
<h3 id="heading-community-growth-and-engagement">Community Growth and Engagement</h3>
<ul>
<li><p><strong>Expanding your developer community:</strong> GSoC can help you attract new developers to your project and community. These developers may continue to contribute after the program is over, leading to a more active and engaged community.</p>
</li>
<li><p><strong>Increased visibility and outreach:</strong> Participating in GSoC can raise awareness of your project and attract attention from a wider audience, including potential users, contributors, and sponsors.</p>
</li>
</ul>
<h3 id="heading-additional-benefits">Additional Benefits</h3>
<ul>
<li><strong>Financial stipend:</strong> Google provides a financial stipend to organizations for each accepted GSoC student. This can be used to support the project and compensate mentors.</li>
</ul>
<h2 id="heading-gsoc-2024-key-dates">GSoC 2024 Key Dates</h2>
<ul>
<li><p>Apr 30, 2024 | Projects announced to organizations</p>
</li>
<li><p>May 1, 2024 | Announcement of accepted projects</p>
</li>
<li><p>Nov 14, 2024 | Program end date</p>
</li>
</ul>
<p>We recognize the similarities and unique advantages both Hacktoberfest and GSoC offer to the open-source community. <a target="_blank" href="https://youtu.be/FFBm2Cb93l8?feature=shared&amp;t=804">Vaunt has proven invaluable in managing contributions during Hacktoberfest</a>, showing its potential to significantly benefit organizations participating in GSoC.</p>
<h1 id="heading-vaunt-benefits-for-gsoc">Vaunt Benefits for GSoC</h1>
<ul>
<li><p><strong>Simplify communication:</strong> Stay connected with students and easily track project progress.</p>
</li>
<li><p><strong>Gain valuable insights:</strong> Track code contributions, identify valuable contributors, and measure project impact.</p>
</li>
<li><p><strong>Spotlight contributions:</strong> Highlight developers’ contributions and showcase their contributions to the repository.</p>
</li>
</ul>
<p>With Vaunt, organizations can maximize their GSoC involvement and nurture the next generation of open-source rockstars. <a target="_blank" href="https://vaunt.dev/">Learn more about Vaunt!</a></p>
<p>Join the adventure! Whether you’re a developer seeking an enriching challenge or an organization ready to empower the future, GSoC offers a unique opportunity. And for organizations, Vaunt acts as your trusty copilot, ensuring a smooth and rewarding GSoC experience. So step beyond pull requests and embark on an unforgettable open-source journey with GSoC and Vaunt!</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop with future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Celebrating Open-Source Excellence]]></title><description><![CDATA[Introduction
Our partner looked to Vaunt, a platform for open-source communities, to successfully distribute digital badges to participants in their docs improvement hackathon, encouraging contributions to their documentation and fostering a stronger...]]></description><link>https://blog.vaunt.dev/celebrating-open-source-excellence</link><guid isPermaLink="true">https://blog.vaunt.dev/celebrating-open-source-excellence</guid><category><![CDATA[Open Source]]></category><category><![CDATA[hackathon]]></category><category><![CDATA[community]]></category><category><![CDATA[digital badges]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Wed, 20 Mar 2024 23:06:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1710947314013/f1986e42-63c6-4455-adab-7b9c51a90e61.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p><a target="_blank" href="https://github.com/pingcap/docs/tree/master/.vaunt">Our partner</a> looked to Vaunt, a platform for open-source communities, to successfully distribute digital badges to participants in their <a target="_blank" href="https://www.pingcap.com/blog/inaugural-tidb-docs-dash-recap/">docs improvement hackathon</a>, encouraging contributions to their documentation and fostering a stronger community around the project.</p>
<h1 id="heading-challenge">Challenge</h1>
<p>Manual badge distribution for a large event can be time-consuming and prone to errors. <a target="_blank" href="https://github.com/pingcap/docs/tree/master/.vaunt">Our partner</a> needed a solution that could</p>
<ul>
<li><p><strong>Automate badge issuance:</strong> Eliminate manual work and ensure accurate badge delivery.</p>
</li>
<li><p><strong>Personalize badges:</strong> Allow custom badge design using their brand guidance.</p>
</li>
<li><p><strong>Recognize and award participants:</strong> Award badges based on specific participation criteria, such as PR, issue, etc.</p>
</li>
</ul>
<h1 id="heading-solution">Solution</h1>
<p><a target="_blank" href="https://github.com/pingcap/docs/tree/master/.vaunt">Our partner</a> integrated Vaunt with several of their GitHub Doc repositories, allowing seamless achievement awards based on predefined criteria for participation scores. For example, participants who completed specific tasks or contributed content received corresponding scores, and the top five contributors earned special badges.</p>
<p><strong>Benefits</strong></p>
<ul>
<li><p><strong>Increased efficiency:</strong> Automated badge distribution saved <a target="_blank" href="https://github.com/pingcap/docs/tree/master/.vaunt">our partner</a> significant time and resources.</p>
</li>
<li><p><strong>Improved accuracy:</strong> Manual errors were eliminated, ensuring everyone received the correct badge.</p>
</li>
<li><p><strong>Enhanced engagement:</strong> Personalized badges motivated participants and boosted community spirit.</p>
</li>
<li><p><strong>Valuable data insights:</strong> Data provided by Vaunt on badge acquisition and engagement will aid future event planning.</p>
</li>
</ul>
<h1 id="heading-results">Results</h1>
<ul>
<li><p><strong>Badge distribution:</strong> Vaunt successfully issued over <strong>70</strong> digital badges to <a target="_blank" href="https://www.pingcap.com/blog/inaugural-tidb-docs-dash-recap/">docs improvement hackathon</a> participants.</p>
</li>
<li><p><strong>Positive feedback:</strong> Participants praised the personalized badges and appreciated valuable recognition for their contributions.</p>
</li>
</ul>
<h1 id="heading-call-to-action">Call to Action</h1>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev"><strong>Sign up for Vaunt today</strong></a> and shine a spotlight on your developer contributions!</p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">X</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Unwrap GitHub Organization Contributions in 2023]]></title><description><![CDATA[As 2023 draws to a close and 2024 begins, you’ve probably noticed many individual contributors proudly displaying their personal GitHub wraps, highlighting their yearly accomplishments. This may lead you to wonder, Why isn’t there a similar year-end ...]]></description><link>https://blog.vaunt.dev/unwrap-github-organization-contributions-in-2023</link><guid isPermaLink="true">https://blog.vaunt.dev/unwrap-github-organization-contributions-in-2023</guid><category><![CDATA[Developer Tools]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[2024]]></category><dc:creator><![CDATA[Simon Cheng]]></dc:creator><pubDate>Wed, 10 Jan 2024 21:27:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1704915705335/162bba37-24aa-4acf-b21b-0320da1bbeda.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As 2023 draws to a close and 2024 begins, you’ve probably noticed many individual contributors proudly displaying their personal GitHub wraps, highlighting their yearly accomplishments. This may lead you to wonder, <strong>Why isn’t there a similar year-end summary for organizations?</strong></p>
<p>That’s exactly what we at Vaunt have been pondering. We recognize that organizations play a vital role in shaping the open-source landscape, and we see an opportunity to focus on their collective achievements and milestones. This review is not only a recognition of the work of the past year, but also an affirmation and inspiration for the future. </p>
<p>In the collaborative spirit of open source, we believe that organizations, just like individual contributors, deserve to celebrate their annual journey. That’s why we’re thrilled to introduce Vaunt’s Organization GitHub Wrap, a feature designed specifically for organizations to celebrate their year on GitHub.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704915581084/ad6fe1af-e96f-4bf8-ae49-a52d04de604b.gif" alt class="image--center mx-auto" /></p>
<p> Visit <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2023">https://community.vaunt.dev/github/wrapped/2023</a> to begin your journey</p>
<h1 id="heading-what-is-vaunts-organization-github-wrap">What Is Vaunt’s Organization GitHub Wrap?</h1>
<p>Vaunt’s Organization GitHub Wrap is a year-end summary tailored for organizations managing projects on GitHub. It provides a comprehensive, visually appealing, and data-driven recap of your project’s performance over the year. Covering metrics such as number of repositories created, issues opened and closed, and more, this feature is custom-built to reflect the unique dynamics and accomplishments of your open-source initiatives.</p>
<h1 id="heading-key-features-and-benefits">Key Features and Benefits</h1>
<p><strong>Highlight Community Achievements</strong>: Celebrate your project’s significant breakthroughs, showcasing the journey and progress made over the year.</p>
<p><strong>Engage Your Community</strong>: Share your GitHub Wrap with your community and stakeholders, not just as a report, but also as a story of collective success, enhancing engagement and solidarity.</p>
<h1 id="heading-get-started-with-your-organization-github-wrap">Get Started With Your Organization GitHub Wrap</h1>
<p>Embrace the year-end celebration with Vaunt’s Organization GitHub Wrap. Visit <a target="_blank" href="https://community.vaunt.dev/github/wrapped/2023">https://community.vaunt.dev/github/wrapped/2023</a> to begin your journey. It’s time to turn data into stories and numbers into narratives—and wrap up the year on a high note.</p>
<h1 id="heading-how-it-works">How It Works</h1>
<p>Generating your organization’s GitHub Wrap with Vaunt is a seamless process. Simply enter a GitHub organization name into the website. Vaunt uses the public GitHub API to collect fascinating insights about the repos owned by the organization, and the data is beautifully transformed into a formatted SVG wrap.  </p>
<p>This wrap isn’t just a summary—it’s a celebration of your year’s journey in code, designed to be shared and enjoyed. Perfect for social media highlights, community forum discussions, or as part of your internal team showcases.</p>
<p>But Vaunt does more than just recap annual statistics; it’s a gateway to deeper community engagement and insights. By installing Vaunt, you gain access to much more granular details and data about your community. <a target="_blank" href="https://github.com/marketplace/vaunt-dev">Install Vaunt today</a> and start uncovering the deeper story behind your community's contributions.  </p>
<h1 id="heading-why-choose-vaunts-organization-github-wrap">Why Choose Vaunt’s Organization GitHub Wrap?</h1>
<p>Vaunt’s Organization GitHub Wrap goes beyond statistics; it’s a testament to your community’s dedication, progress, and collaborative spirit. Suited for organizations of all sizes, from emerging startups to established enterprises, the wrap serves as a mirror reflecting your project’s vitality and community health.</p>
<p>Good news—it also supports the same metrics for individual users! You can leverage your wrap and share it on your social media to highlight your personal contributions as well.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>As the open-source world continues to evolve and expand, Vaunt’s Organization GitHub Wrap stands as a beacon of celebration and insight. It’s more than a tool; it’s a reflection of your journey and triumphs, and the unyielding spirit of collaboration that drives the open-source community. As 2024 unfolds, we eagerly anticipate the rich, detailed insights that next year's 2024 wrap will reveal. Join us in embracing a more insightful and rewarding way to conclude your year in open source.</p>
<p>Vaunt is a powerful tool that helps you showcase your developer contributions. With Vaunt, you can create meaningful, interactive SVG cards that celebrate your community’s achievements and contributions. You can also use Vaunt’s public API to get data on contributions. And even leverage Vaunt for hero programs or to host hackathons.</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev">Sign up for Vaunt today</a> and shine a spotlight on your developer contributions!  </p>
<p>To stay in the loop on future developments, follow us on <a target="_blank" href="https://twitter.com/VauntDev">Twitter</a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2">Discord</a>! And don’t hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Unveiling the Hacktoberfest Impact: Insights from Vaunt's Data]]></title><description><![CDATA[Introduction
The month of Hacktoberfesft is coming to a close, and it's time to unveil the remarkable insights we've gathered. At Vaunt, we've been on a mission to support open-source communities, incentivize developers, and recognize their valuable ...]]></description><link>https://blog.vaunt.dev/unveiling-the-hacktoberfest-impact-insights-from-vaunts-data</link><guid isPermaLink="true">https://blog.vaunt.dev/unveiling-the-hacktoberfest-impact-insights-from-vaunts-data</guid><category><![CDATA[#hacktoberfest ]]></category><category><![CDATA[bigquery]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Hacktoberfest2023]]></category><category><![CDATA[achievements]]></category><dc:creator><![CDATA[Jeff Simpson]]></dc:creator><pubDate>Tue, 07 Nov 2023 13:00:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1699306608694/194e7aee-1a21-44aa-a1c2-a76953dc5122.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>The month of Hacktoberfesft is coming to a close, and it's time to unveil the remarkable insights we've gathered. At Vaunt, we've been on a mission to support open-source communities, incentivize developers, and recognize their valuable contributions. Let's dive into the data we've collected from this fantastic open-source celebration.</p>
<h1 id="heading-hacktoberfest-and-vaunt">Hacktoberfest and Vaunt</h1>
<p>For the uninitiated, Hacktoberfest is an annual event that encourages open-source contributions, organized by DigitalOcean. This year, Vaunt joined in to celebrate the contributions of developers to the open-source community.</p>
<h1 id="heading-collecting-valuable-data">Collecting Valuable Data</h1>
<p>Vaunt leveraged an archive of GitHub data to gain insights into Hacktoberfest. You can find more information about this archive at <a target="_blank" href="https://www.gharchive.org/">GH Archive</a>, including how the archive has been made available through a public BigQuery dataset. Additionally, we've developed our own GitHub app to streamline data collection. The app captures information about pull requests, issues, commits, reviews, stars, and discussions.</p>
<p>The archive dataset in BigQuery can be used to find events directly related to Hacktoberfest by checking for events with the type “PullRequestEvent” and parsing valuable information from the payload. For example, you can check the base repository topics for “hacktoberfest” as well as look for labels including “hacktoberfest” or “hacktoberfest_accepted” and get additional information such as the created_at time of the PR and whether it was closed.</p>
<p>Here is a snippet of one of the queries we used when checking for authors of multiple pull requests in repositories with the Hacktoberfest topic or label:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> JSON_EXTRACT_SCALAR(payload, <span class="hljs-string">'$.pull_request.user.login'</span>) <span class="hljs-keyword">FROM</span> githubarchive.day<span class="hljs-number">.20231001</span>
  <span class="hljs-keyword">WHERE</span> (<span class="hljs-keyword">type</span>=<span class="hljs-string">"PullRequestEvent"</span> <span class="hljs-keyword">and</span> (JSON_EXTRACT(payload, <span class="hljs-string">'$.pull_request.base.repo.topics'</span>) <span class="hljs-keyword">like</span> <span class="hljs-string">'%"hacktoberfest"%'</span>
  <span class="hljs-keyword">OR</span> JSON_EXTRACT(payload, <span class="hljs-string">'$.pull_request.labels'</span>) <span class="hljs-keyword">like</span> <span class="hljs-string">'%"hacktoberfest"%'</span>
  <span class="hljs-keyword">OR</span> JSON_EXTRACT(payload, <span class="hljs-string">'$.pull_request.labels'</span>) <span class="hljs-keyword">like</span> <span class="hljs-string">'%"hacktoberfest_accepted"%'</span>)
  <span class="hljs-keyword">AND</span> JSON_EXTRACT_SCALAR(payload, <span class="hljs-string">'$.pull_request.state'</span>)=<span class="hljs-string">'closed'</span>
  <span class="hljs-keyword">AND</span> JSON_EXTRACT_SCALAR(payload, <span class="hljs-string">'$.pull_request.created_at'</span>) &gt; <span class="hljs-string">'2023-01-01T00:00:00Z'</span>
  <span class="hljs-keyword">AND</span> JSON_EXTRACT(payload, <span class="hljs-string">'$.pull_request.labels'</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">like</span> <span class="hljs-string">'%"spam"%'</span>
  <span class="hljs-keyword">AND</span> JSON_EXTRACT(payload, <span class="hljs-string">'$.pull_request.labels'</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">like</span> <span class="hljs-string">'%"invalid"%'</span>)
  <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">1</span> <span class="hljs-keyword">HAVING</span> <span class="hljs-keyword">COUNT</span>(<span class="hljs-keyword">distinct</span> repo.name) &gt;= <span class="hljs-number">2</span> <span class="hljs-keyword">AND</span> <span class="hljs-keyword">COUNT</span>(*) &gt;= <span class="hljs-number">4</span> <span class="hljs-keyword">limit</span> <span class="hljs-number">10</span>;
</code></pre>
<h1 id="heading-the-github-impact">The GitHub Impact</h1>
<p>GitHub has been at the heart of Hacktoberfest. As of our last check, there were over 139,000 repositories with the Hacktoberfest topic. These repositories have participated in the event over the past ten years and have retained the topic. This demonstrates the long-lasting impact of this open-source celebration.</p>
<h1 id="heading-active-stats">Active Stats</h1>
<p>This year, we've collected data from 42,000 unique repositories that had pull requests, issues, or reviews labeled with Hacktoberfest. The data also includes 63,000 users who've contributed in various ways, and 5,481 unique organizations participating.</p>
<p>User Engagement: The numbers speak volumes. The engagement in GitHub repositories with Hacktoberfest activity was substantial. It reflects the enthusiasm of developers in the open-source community.</p>
<p><img src="https://lh7-us.googleusercontent.com/9n_9LbWsh1bEgPH6AnzZNnXQu40AQY81nFjxwT_Cl8K62Wic9kWABCUwbI0Orq-aPreq1_kMvPPni5MYoLbdVcibkgGoKSSMvpvEWToQeshyQdQV3FN5sxa31dz9eNoTt_33RhR1NXWYhO8g86Da0PY" alt /></p>
<h1 id="heading-a-month-of-high-activity">A Month of High Activity</h1>
<p>The activity in GitHub repositories marked with the Hacktoberfest topic saw spikes during the early days of October. These surges demonstrate how developers eagerly joined the event. The activity dipped slightly over weekends, as expected, but it remained relatively high throughout the month.</p>
<p><img src="https://lh7-us.googleusercontent.com/A8-Gwtb0M6jtqVWDaqiDew7076QTJCc6bvf5_oDcaqDm-bbs1hFAHzUf7zQNWOrm7jRK8XrAAzHrffcQqQ3ABpPovTaGKLqwEuZbJzdcyztotZPZmruWW3KaRLHL80mtknfMEOZWma0Ezx9jl_DDCKo" alt /></p>
<h1 id="heading-a-surge-in-open-issues">A Surge in Open Issues</h1>
<p>While Hacktoberfest didn't specifically track issues for awards, maintainers actively opened issues with the Hacktoberfest label to encourage contributions. This led to a surge of opened issues in the early days of the event, and many were subsequently closed, showing a significant level of developer engagement.</p>
<p><img src="https://lh7-us.googleusercontent.com/RkpdszPHBrHcaNFACcNrVtc40RKSMNutGavNYusyZcDPt5gzmgsFxCSM45Lg1jtm9G3kskVL-65rth2d8vw0ruhU6wj4mCyWWEdsGOziKB0Co6kWzc8jrilpzgI5W-DlvMDkrPYYfAeeEnYkquJOOj0" alt /></p>
<h1 id="heading-a-glimpse-of-github-archive-data">A Glimpse of GitHub Archive Data</h1>
<p>Our analysis of GitHub archive data for two months, September and October, reveals an impressive story. The number of users who made contributions doubled during October, coinciding with Hacktoberfest. Repositories that received contributions also doubled in number. This data demonstrates the undeniable impact of Hacktoberfest on open-source contributions.</p>
<p><img src="https://lh7-us.googleusercontent.com/GTvVx6GE8eNlxagEaCSluihFx4MWLtODIFmZ_1GVue9U7PaEsrxOjK2bU0uOCSraX4eexgfR4YfTogjvXOHW-rusvr9tTPHRhwaTO_8H8YXYrC_Wnf35ZOWYrdCcG6y86RiJM1yxGqVu0d3_MuZgpJc" alt /></p>
<h1 id="heading-custom-achievements-and-more">Custom Achievements and More</h1>
<p>With the data collected, Vaunt created a set of custom achievements to recognize participating users. Some of these achievements are similar to the Hacktoberfest criteria and a few are custom-made ones to make the event even more special.</p>
<p>Our first achievement, Stellar Starter, was awarded to any user who contributed to a GitHub repository with the Hacktoberfest topic during October 2023. This includes creating, reviewing, or commenting on pull requests or issues. This achievement was meant to be more open to allow as many users as possible who are contributing to Hacktoberfest to qualify. So far 61,180 users have been identified that earned this achievement.</p>
<p><img src="https://lh7-us.googleusercontent.com/NA7AfglLx1d3quNBsmOG-aKbA8NO8gJlfLql_8U0DNaQhlLvv5y9ui_J6y2kMyGDXh9AahOHWZnyKowijcSr1TIznIIsFL5PMlWUNXbokx-Jpme0-DC2_jWUqahkhrjRoHpf0kqHyTwPeqt1E-wluxw" alt /></p>
<p>The second achievement is called Cosmic Coder.  This is awarded to users who created and merged 2 or more qualifying pull requests to a Hacktoberfest repository during October 2023. This one is meant to be a little more challenging to earn than the starter and is similar to the Hacktoberfest award, however, only requires 2 pull requests instead of 4. So far 31,478 unique users have qualified for this achievement.</p>
<p><img src="https://lh7-us.googleusercontent.com/ADcbITYWY7CO8umVtxlULDxCajpBS8FuABG-CC_ect3rjHzkACGkIzSpk-G6w4d1AWu0kx3rTTxbTKNK9nlU2ZhUbu8vtK3ANFSfwgWFyvHvNB5fy5F8G4--pZ5NPqL-N24TBywhC_Tq2D0HYGgixk0" alt /></p>
<p>The third achievement is called Interstellar Voyager. This one is awarded to users who created and merged 4 pull requests to multiple repositories with the Hacktoberfest topic during October 2023. One additional stipulation of this achievement is that the users must be contributing to more than one repository, which is slightly different from the Hacktoberfest award. So far 11,818 users have qualified for this achievement.</p>
<p><img src="https://lh7-us.googleusercontent.com/YX_fY5xF1SG3rzeODpd3ge1YwSC2VR4hewdRJkdGZRIMyDlIqjtSQe4dMFtf66BSHT4uRIrDSwEx8VhH586XpX_HVxHtJsZ8FR17BZHhDZ7B8Agost91ow5qzRb7HkSfRj7Fd6F5ooZQIv6mcRm7lFI" alt /></p>
<p>From the GH Archive data that we processed, we found that a majority of users who participate in Hacktoberfest only contribute to a single repository. So we thought it would be nice to reward users who make significant contributions to more than one repository during the event.</p>
<p><img src="https://lh7-us.googleusercontent.com/ZMSLUn_3E3ITloZAE7UWhDV-AYV8X5xDf3vtg-Z3BsjRaAQaFJ3y6Ry-1f0b8nRq-VLPooQg0BnV0qVGlWGW4XDGzEo4BbzLsVJeSsXL-8VI1iYbpUfR4mTnOFsUziCOn31yMx0goVwl_hPM7tZGwpg" alt /></p>
<p>Our last achievement is called Galactic Hacker. This one is awarded to users who create and merge 4 pull requests to multiple repositories and close 4 issues that were created during October 2023. These criteria were chosen to be significantly more difficult to achieve to recognize users who go above and beyond to contribute to open-source repositories. So far this achievement has been awarded to 471 users.</p>
<p><img src="https://lh7-us.googleusercontent.com/YX_fY5xF1SG3rzeODpd3ge1YwSC2VR4hewdRJkdGZRIMyDlIqjtSQe4dMFtf66BSHT4uRIrDSwEx8VhH586XpX_HVxHtJsZ8FR17BZHhDZ7B8Agost91ow5qzRb7HkSfRj7Fd6F5ooZQIv6mcRm7lFI" alt /></p>
<h1 id="heading-install-vaunt">Install Vaunt</h1>
<p>All of these achievements are specifically granted through Vaunt, which can be installed for free for users from the <a target="_blank" href="https://github.com/marketplace/vaunt-dev">GitHub Marketplace</a>. If you contributed during Hacktoberfest and would like to show off your achievements on your own personal GitHub README, then just install Vaunt and follow our guide to set up your profile <a target="_blank" href="https://docs.vaunt.dev/guides/github/github-profile">here</a>.</p>
<p>Once you have Vaunt installed you can add the following code to your <a target="_blank" href="http://README.md">README.md</a> on your profile to show your Achievement badges by just replacing <strong>{github_username}</strong> with your username:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://api.vaunt.dev/v1/github/entities/{github_username}/achievements?format=svg&amp;limit=3"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"350"</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
</code></pre>
<p>Contributions from October are still being processed and reviewed so allow some time for the achievements to be added.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>The data we've gathered paints a clear picture of the incredible impact of Hacktoberfest. It showcases the unwavering dedication of the open-source community and the power of collaborative development. As Hacktoberfest draws to a close, Vaunt celebrates the countless developers who've dedicated their time and expertise to enriching the world of open source.</p>
<p>With this incredible data in hand, we're excited to continue our mission of supporting open-source communities and rewarding developers for their contributions. Let's make open source even better, together!</p>
<p><a target="_blank" href="https://github.com/marketplace/vaunt-dev"><strong>Sign up for Vaunt today</strong></a> and start showcasing your developer contributions!</p>
<p>To stay in the loop on future developments follow us on <a target="_blank" href="https://twitter.com/VauntDev"><strong>Twitter</strong></a> or join our <a target="_blank" href="https://discord.gg/mn29Xkvry2"><strong>Discord</strong></a>! Don't hesitate to make feature requests.</p>
]]></content:encoded></item><item><title><![CDATA[Dynamic SQL Template with Golang]]></title><description><![CDATA[TL;DR ... mas tqla!
In software development, adaptability is key. As code evolves, so does the challenge of simplicity and readability. This issue invariably emerges when developing large-scale applications necessitating numerous diverse SQL statemen...]]></description><link>https://blog.vaunt.dev/dynamic-sql-template-with-golang</link><guid isPermaLink="true">https://blog.vaunt.dev/dynamic-sql-template-with-golang</guid><category><![CDATA[golang]]></category><category><![CDATA[SQL]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Ethan Lewis]]></dc:creator><pubDate>Thu, 26 Oct 2023 14:56:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698278403502/58843b97-25ca-4b46-ab74-6d248340eb84.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>TL;DR ... mas tqla!</strong></p>
<p>In software development, adaptability is key. As code evolves, so does the challenge of simplicity and readability. This issue invariably emerges when developing large-scale applications necessitating numerous diverse SQL statement variations.</p>
<p>Static SQL queries often fall short when you need some form of conditional query generation. Crafting dynamic queries in Golang requires mastery of SQL and the nuances of Golang.</p>
<p>The hurdles include preventing SQL injection, using parameterized queries, managing query complexity, optimizing performance, and maintaining code readability.</p>
<p>In this article, we will dive into strategies and libraries designed to tackle these issues and introduce a new library called <a target="_blank" href="https://github.com/vauntdev/tqla">tqla</a> ( pronounced <strong>tequila</strong> ) that leverages Golang’s powerful <a target="_blank" href="https://pkg.go.dev/text/template">text/template</a> package to generate dynamic conditional SQL statements securely with ease. If you are new to templating with Golang, I would suggest getting started by reading the docs and this <a target="_blank" href="https://www.digitalocean.com/community/tutorials/how-to-use-templates-in-go">blog</a> from <a target="_blank" href="https://www.digitalocean.com/">Digital Ocean</a>.</p>
<p>All of the code for this article can be found on <a target="_blank" href="https://github.com/VauntDev/blogSnippets/tree/main/apps/todo">GitHub</a>.</p>
<h2 id="heading-challenges-of-building-dynamic-sql-query"><strong>Challenges of Building Dynamic SQL Query</strong></h2>
<p>Many software applications require conditional SQL statements. This often becomes more apparent when developing an API that allows for some level of filtering or pagination.  As queries become more dynamic, challenges arise.</p>
<p>At a glance, a few challenges include:</p>
<ul>
<li><p><strong>Security:</strong> It is important to ensure that your dynamic SQL queries are secure and that they do not expose sensitive data.</p>
</li>
<li><p><strong>Performance:</strong> Dynamic SQL queries can be slow, especially if they need to be split into multiple statements due to query builder limitations.</p>
</li>
<li><p><strong>Maintainability:</strong> It can be difficult to maintain dynamic SQL queries, especially as they become more complex due to business logic or conditional formatting constraints.</p>
</li>
</ul>
<p>Let's walk through a real-world example that highlights these challenges.</p>
<h2 id="heading-todo-application">Todo Application</h2>
<p>In a previous <a target="_blank" href="https://blog.vaunt.dev/generic-http-handlers">article</a>, we announced a generic, lightweight, HTTP handler framework that simplifies request/response marshaling. We built a very basic Todo Application that exposes an API that supports basic operations such as creating and retrieving todos.</p>
<p>In this post, we will focus primarily on our <code>todo</code> service, which is responsible for storing and retrieving todos from a data store. Specifically, we will extend our service to use a database. As we implement each database function, we will walk through how <code>tqla</code> can be used to avoid the challenges mentioned above.</p>
<h3 id="heading-database-creation">Database Creation</h3>
<p>To keep things simple we will be storing todos in Sqlite. Creating the database in Golang can be done with the following code:</p>
<pre><code class="lang-go">db, err := sql.Open(<span class="hljs-string">"sqlite3"</span>, “example.db”)
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    log.Fatal(err)
}
<span class="hljs-keyword">defer</span> db.Close()
</code></pre>
<p>The above code creates a db connection to a local called <code>example.db</code>. Once the database has been created and the connection is established, we can set up our <code>todo</code> table.</p>
<p>Below is our <code>todo</code> table schema:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">exists</span> todos (
  <span class="hljs-keyword">id</span> <span class="hljs-built_in">text</span> primary <span class="hljs-keyword">key</span>,
  title <span class="hljs-built_in">text</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">null</span>,
  description <span class="hljs-built_in">text</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">null</span>,
  completed <span class="hljs-built_in">boolean</span> <span class="hljs-keyword">default</span> <span class="hljs-number">0</span>,
  created_at <span class="hljs-built_in">TIMESTAMP</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CURRENT_TIMESTAMP</span>,
  updated_at <span class="hljs-built_in">TIMESTAMP</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CURRENT_TIMESTAMP</span> 
);
</code></pre>
<p>We can apply our schema by leveraging the previously created db connection as follows:</p>
<pre><code class="lang-go"><span class="hljs-keyword">if</span> _, err := db.Exec(todoSchema); err != <span class="hljs-literal">nil</span> {
    log.Fatal(err)
}
</code></pre>
<p>Now that we have a database setup, we will implement our service that will store and retrieve todos.</p>
<h3 id="heading-service-definition">Service Definition</h3>
<p>Our Todo service will have three functions, Add, Get, and List.</p>
<pre><code class="lang-go"><span class="hljs-keyword">type</span> TodoService <span class="hljs-keyword">struct</span> {
    db *sql.DB
}

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts *TodoService)</span> <span class="hljs-title">Add</span><span class="hljs-params">(todos []pb.Todo)</span> <span class="hljs-title">error</span></span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>}
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts TodoService)</span> <span class="hljs-title">Get</span><span class="hljs-params">(id <span class="hljs-keyword">string</span>)</span> <span class="hljs-params">(pb.Todo, error)</span></span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>,<span class="hljs-literal">nil</span> }
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts TodoService)</span> <span class="hljs-title">List</span><span class="hljs-params">(filter Filter)</span> <span class="hljs-params">([]*pb.Todo, error)</span></span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>,<span class="hljs-literal">nil</span>}
</code></pre>
<p>Let's start by implementing the <code>Add</code> function. Since we always have more things <strong><em>Todo</em></strong> than we have time for, our <code>Add</code> function accepts multiple Todos.</p>
<p>There are a number of ways we can implement this using our db driver.  Since we know there can be more than one to-do, we will want to attempt to add all eligible insert values to our statement.</p>
<p>Below are several implementations that use different techniques to build a database statement and argument slice.</p>
<h3 id="heading-standard-library-sql-statement">Standard Library SQL Statement</h3>
<p>Before <code>tqla</code>, a solution that uses only the standard library might look something like this:</p>
<pre><code class="lang-go">valueStatement := <span class="hljs-built_in">make</span>([]<span class="hljs-keyword">string</span>, <span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(todos))
args := <span class="hljs-built_in">make</span>([]any, <span class="hljs-number">0</span>)
<span class="hljs-keyword">for</span> _, t := <span class="hljs-keyword">range</span> todos {
    valueStatement = <span class="hljs-built_in">append</span>(valueStatement, <span class="hljs-string">"(?, ?, ?, ?, ?)"</span>)
    args = <span class="hljs-built_in">append</span>(args, t.Id, t.Title, t.Description, t.Complete, t.CreatedAt)
}
stmt := fmt.Sprintf(<span class="hljs-string">"INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at') Values %s"</span>,
    strings.Join(valueStatement, <span class="hljs-string">","</span>))

_, err := db.Exec(stmt, args...)
</code></pre>
<p>In this example, we continue to append to the original statement and track arguments in order. However, this statement can get even more complex if you are using a database like Postgres, which requires placeholders to be <code>$number</code> instead of <code>?</code>.</p>
<p>I’ll spare everyone by excluding the function that I’m sure many of us have written that finds and replaces all <code>?</code> with <code>$number</code> placeholders...</p>
<p>While this example is simple, most people will likely feel the need for a library that can assist with building an SQL statement.</p>
<p>Up next, we will be using a simple statement builder to help offload some of the complexity in the above implementation.</p>
<h3 id="heading-squirrel-statement-builder">Squirrel Statement Builder</h3>
<p>Many awesome SQL statement builders exist. One of our favorites is <a target="_blank" href="https://github.com/Masterminds/squirrel">squirrel</a>. If you haven’t checked it out, please do! Having familiarity with <code>squirrel</code> will help provide context on why we decided to build <code>tqla</code>.</p>
<p>Let’s rewrite the above example using <code>squirrel</code> as the query builder.</p>
<pre><code class="lang-go">psql := squirrel.StatementBuilder.PlaceholderFormat(squirrel.Dollar)

stmt := psql.Insert(<span class="hljs-string">"todos"</span>).
    Columns(<span class="hljs-string">"id"</span>, <span class="hljs-string">"title"</span>, <span class="hljs-string">"description"</span>, <span class="hljs-string">"completed"</span>, <span class="hljs-string">"created_at"</span>)

<span class="hljs-keyword">for</span> _, t := <span class="hljs-keyword">range</span> todos {
    stmt = stmt.Values(t.Id, t.Title, t.Description, t.Complete, t.CreatedAt)
}

insertStmt, insertArgs, err := stmt.ToSql()
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> err
}

_, err := db.Exec(insertStmt, insertArgs...)
</code></pre>
<p>The above has several advantages compared to our first implementation. We no longer need to worry about tracking the statements and arguments.</p>
<p>Additionally, <code>squirrel</code> has also removed the need for placeholder formatting, meaning we no longer have to worry about what placeholder syntax our db requires.</p>
<p>That said, one big drawback, is we have lost the ability to see the majority of the query. Squirrel follows a builder pattern, which abstracts some of the common SQL syntax from us. This also means our SQL statement must fit into the builder functions Squirrel exposes.</p>
<p>Any familiar squirrel user knows that this can cause problems with nested selects, and complex joins.</p>
<p>As your applications grow, and you include limits, pagination, or other custom filters the amount of query sprawl grows with <code>squirrel</code>. Eventually, you are left with large functions with a limited understanding of what the final query could be without extensive review.</p>
<h3 id="heading-tqla-statement-builder">Tqla Statement Builder</h3>
<p>Let's try one last implementation, now using <code>tqla</code>.</p>
<pre><code class="lang-go">t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> err
}

insertStmt, insertArgs, err:= t.Compile(<span class="hljs-string">`{{ $length := sub ( len . ) 1 }}
INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at') 
VALUES {{ range $i, $v := . }}
( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}},{{else}};{{end -}}
{{end}}`</span>, todos)

<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    <span class="hljs-keyword">return</span> err
}

_, err := db.Exec(insertStmt, insertArgs...)
</code></pre>
<p>The above example blends both of our previous solutions and provides more visibility and control into how the statement is built. <code>Tqla</code> still handles many of the messy details of query building, such as tracking arguments, ensuring safety, and driver interoperability. Most importantly, <code>tqla</code> extends Golang’s text templating by leveraging all of the powerful built-in capabilities of templating while preventing SQL injection.</p>
<p>We believe that <code>tqla</code> provides a more flexible and powerful query builder.</p>
<p>Our final <code>Add</code> implementation is as follows</p>
<pre><code class="lang-go"><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts *TodoService)</span> <span class="hljs-title">Add</span><span class="hljs-params">(todos []pb.Todo)</span> <span class="hljs-title">error</span></span> {
    <span class="hljs-comment">// Init TQLA with the DB placeholder to use and additional functions that can</span>
    <span class="hljs-comment">// be called by the template.</span>
    t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }
    insertStmt, insertArgs, err := t.Compile(<span class="hljs-string">`{{ $length := sub ( len . ) 1 }}
        INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at') 
        VALUES {{ range $i, $v := . }}
             ( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}}, {{else}}; {{end -}}
        {{end}}`</span>, todos)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }

    <span class="hljs-keyword">if</span> _, err := ts.db.Exec(insertStmt, insertArgs...); err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>
}
</code></pre>
<p>In case you're not convinced to give <code>tqla</code> a try, let's take a look at a few more examples by implementing our remaining functions.</p>
<h3 id="heading-additional-tqla-examples">Additional Tqla Examples</h3>
<p>Up next, we will implement our <code>Get</code> todo function. The purpose of this example is to show how even simple queries can leverage <code>tqla</code>.</p>
<pre><code class="lang-go">
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts *TodoService)</span> <span class="hljs-title">Get</span><span class="hljs-params">(id <span class="hljs-keyword">string</span>)</span> <span class="hljs-params">(*pb.Todo, error)</span></span> {

    t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar))
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    selectStmt, selectArgs, err := t.Compile(<span class="hljs-string">`
    select id,title, description, completed, created_at 
    from todos 
    where id= {{ . }}`</span>, id)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    todo := &amp;pb.Todo{}
    row := ts.db.QueryRow(selectStmt, selectArgs...)
    <span class="hljs-keyword">if</span> err := row.Scan(&amp;todo.Id, &amp;todo.Title, &amp;todo.Description, &amp;todo.Complete, &amp;todo.CreatedAt); err != <span class="hljs-literal">nil</span> {
        log.Println(err)
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    <span class="hljs-keyword">return</span> todo, <span class="hljs-literal">nil</span>
}
</code></pre>
<p>In this example, our function takes a todo ID which is supplied to our SQL template using <code>tqla</code>. The ID variable is replaced directly by <code>tqla</code> to create a final select statement that looks like this:</p>
<p><code>select id, title, description, completed, created_at from todos where id=$1</code></p>
<p>While <code>tqla</code> may not be needed in every SQL statement use case, our goal is to make it as low friction as possible so that it can grow with your application as query requirements change.</p>
<p>With the the <code>Get</code> function out of the way, all that is left is to implement our <code>List</code> function.</p>
<p>For our <code>List</code> function, we have a few more requirements. We need to support a <code>Limit</code> and optionally pagination by using a <code>Before</code> and <code>After</code> cursor. For pagination, we will use a base64 encoded string that is a combination of the <code>created_at</code> and <code>id</code> columns. We will use <code>Before</code> and <code>After</code> to represent the direction of the cursor for pagination.</p>
<pre><code class="lang-go"><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-params">(ts *TodoService)</span> <span class="hljs-title">List</span><span class="hljs-params">(filter *Filter)</span> <span class="hljs-params">([]*pb.Todo, error)</span></span> {

    t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    selectStmt, selectArgs, err := t.Compile(<span class="hljs-string">`
    SELECT id, title, description, completed, created_at 
    FROM todos 
    {{ $page := ( parseCursor .After .Before .Limit ) }}
    {{ if $page.Forward }}
        WHERE (created_at,id) &gt; ({{ $page.CreatedDttm }},{{ $page.Id }})
    {{ else }}
        WHERE (created_at,id) &lt; ({{ $page.CreatedDttm }}, {{ $page.Id }})
    {{ end }}
    ORDER BY created_at
    LIMIT {{ $page.Limit }}
    `</span>, filter)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    rows, err := ts.db.Query(selectStmt, selectArgs...)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }

    todos := <span class="hljs-built_in">make</span>([]*pb.Todo, <span class="hljs-number">0</span>)
    <span class="hljs-keyword">for</span> rows.Next() {
        todo := &amp;pb.Todo{}
        <span class="hljs-keyword">if</span> err := rows.Scan(&amp;todo.Id, &amp;todo.Title, &amp;todo.Description, &amp;todo.Complete, &amp;todo.CreatedAt); err != <span class="hljs-literal">nil</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
        }

        todos = <span class="hljs-built_in">append</span>(todos, todo)
    }

    <span class="hljs-keyword">return</span> todos, <span class="hljs-literal">nil</span>
}
</code></pre>
<p>The above example shows the full power of <code>tqla</code> by also leveraging a feature called custom functions.</p>
<h3 id="heading-custom-functions">Custom Functions</h3>
<p>The above examples showcase how <code>tqla</code> can be used in a number of use cases. Keep in mind that <code>tqla</code> is simply a query builder with the main focus of ensuring proper variable placeholder replacement.</p>
<p>That said, there are a few tricks that we have not covered yet. A unique and powerful feature of <code>tqla</code> is the ability to implement custom functions. Above, we created a function called <code>parseCursor</code>.</p>
<p>Here is how the parseCursor function is implemented:</p>
<pre><code class="lang-go"><span class="hljs-comment">// tqla can be expanded through custom functions.</span>
<span class="hljs-keyword">var</span> exampleFuncs = template.FuncMap{
    <span class="hljs-comment">// parseCursor creates a Pagination object from a base64 encoded cursor.</span>
    <span class="hljs-comment">// Uses after if before is empty other wise uses before. If both after and before are set</span>
    <span class="hljs-comment">// then the Pagination object returned in nil.</span>
    <span class="hljs-string">"parseCursor"</span>: <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">(after <span class="hljs-keyword">string</span>, before <span class="hljs-keyword">string</span>, limit <span class="hljs-keyword">uint8</span>)</span> *<span class="hljs-title">Page</span></span> {
        cursor := <span class="hljs-string">""</span>
        forward := <span class="hljs-literal">false</span>
        createdDttm := <span class="hljs-string">""</span>
        id := <span class="hljs-string">""</span>

        <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(after) &gt; <span class="hljs-number">0</span> &amp;&amp; <span class="hljs-built_in">len</span>(before) == <span class="hljs-number">0</span> {
            forward = <span class="hljs-literal">true</span>
            cursor = after

        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(before) &gt; <span class="hljs-number">0</span> &amp;&amp; <span class="hljs-built_in">len</span>(after) == <span class="hljs-number">0</span> {
            forward = <span class="hljs-literal">false</span>
            cursor = before
        }

        <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(cursor) &gt; <span class="hljs-number">0</span> {
            data, err := base64.StdEncoding.DecodeString(cursor)
            <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>
            }
            values := strings.Split(<span class="hljs-keyword">string</span>(data), <span class="hljs-string">"/"</span>)
            <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(values) == <span class="hljs-number">2</span> {
                createdDttm = values[<span class="hljs-number">0</span>]
                id = values[<span class="hljs-number">1</span>]
            }
        }

        <span class="hljs-keyword">if</span> limit &gt; maxLimit {
            limit = maxLimit
        }

        t, _ := time.Parse(<span class="hljs-string">"2006-01-02T15:04:05Z"</span>, createdDttm)
        <span class="hljs-keyword">return</span> &amp;Page{
            Forward:     forward,
            CreatedDttm: t,
            Id:          id,
            Limit:       limit,
        }
    },
}
</code></pre>
<p>These functions can then be registered with <code>tqla</code> through the options pattern.</p>
<p>Here is an example:</p>
<pre><code class="lang-go">t, err := tqla.New(tqla.WithFuncMap(exampleFuncs))
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>, err
    }
</code></pre>
<p>There are a myriad of use cases for custom functions and they are a unique feature that provides the flexibility to extend <code>tqla</code> for your specific use cases.</p>
<h2 id="heading-tqla-at-vaunt">Tqla at Vaunt</h2>
<p>At Vaunt, we have begun replacing <code>squrriel</code> with <code>tqla</code>. So far we have been extremely happy with the flexibility with <code>tqla</code>.</p>
<p>Here is a recent use case</p>
<pre><code class="lang-go">data := <span class="hljs-keyword">struct</span> {
        Provider   <span class="hljs-keyword">string</span>
        ExternalId <span class="hljs-keyword">string</span>
        Member     <span class="hljs-keyword">string</span>
        UpdatedAt  time.Time
    }{
        Provider:   provider,
        ExternalId: externalId,
        Member:     member,
        UpdatedAt:  updatedAt,
    }

    templateFuncs := template.FuncMap{
        <span class="hljs-string">"toArray"</span>: <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">(val <span class="hljs-keyword">string</span>)</span> <span class="hljs-title">string</span></span> {
            <span class="hljs-keyword">return</span> <span class="hljs-string">"{"</span> + val + <span class="hljs-string">"}"</span>
        },
    }

    t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(templateFuncs))
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }

    updateStmt, updateArgs, err := t.Compile(<span class="hljs-string">`
    update vaunt.entities 
        set members = array_append(members, {{ .Member }})
    where (members is null OR not members @&gt; {{ toArray .Member }}) and provider = {{ .Provider }} and external_id = {{ .ExternalId }} and updated_at &lt; {{ .UpdatedAt }};
    `</span>, data)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }

    _, err = crdb.conn.Exec(ctx, updateStmt, updateArgs...)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        <span class="hljs-keyword">return</span> err
    }
</code></pre>
<p>The goal was to write a query that would append a value to a member array if the value was not already contained in the array.  The array <code>contains</code> function <code>'@&gt;'</code> in Postgres is used to compare two arrays, as described <a target="_blank" href="https://www.postgresql.org/docs/current/functions-array.html#FUNCTIONS-ARRAY">here</a>.</p>
<p>The second argument needed to be an array containing the value we wanted to check.  Using <code>tqla</code>, we were able to do this by writing a custom template function that turned our string argument into a string array for comparison.</p>
<h2 id="heading-contribute"><strong>Contribute</strong></h2>
<p>We believe strongly in open-source technology and developer-led growth. Vaunt is a tool that focuses on showcasing contributors and highlighting the contributions that they make.</p>
<p>There are a number of ways to contribute to <code>tqla</code>. You can get started by reviewing our <a target="_blank" href="https://github.com/VauntDev/tqla/blob/main/.github/CONTRIBUTING.md">Contributing.md</a> doc and checking out any <a target="_blank" href="https://github.com/VauntDev/tqla/issues">open issues</a>.</p>
<p>To help thank <code>tqla</code> contributors, we have enabled several custom achievements that can be earned, powered by <a target="_blank" href="https://vaunt.dev/">Vaunt</a>. We believe in the tools we are building and of course, leverage them ourselves.</p>
<p>Go check out our <code>tqla</code>'s <a target="_blank" href="https://community.vaunt.dev/board/VauntDev/repository/tqla">community page</a> to see the latest contributors who have earned achievements on <code>tqla</code>!</p>
<p>The following manifest outlines how achievements can be earned on <code>tqla</code></p>
<pre><code class="lang-yaml"><span class="hljs-attr">version:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.1</span>
<span class="hljs-attr">achievements:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span>
      <span class="hljs-attr">name:</span> <span class="hljs-string">Mas</span> <span class="hljs-string">Tqla!</span>
      <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/mas_tqla.png</span>
      <span class="hljs-attr">description:</span> <span class="hljs-string">uno</span> <span class="hljs-string">mas,</span> <span class="hljs-string">dba...,</span> <span class="hljs-string">one</span> <span class="hljs-string">more,</span> <span class="hljs-string">mas</span> <span class="hljs-string">tqla!</span>   
      <span class="hljs-attr">triggers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
            <span class="hljs-attr">actor:</span> <span class="hljs-string">author</span>
            <span class="hljs-attr">action:</span> <span class="hljs-string">star</span>
            <span class="hljs-attr">condition:</span> <span class="hljs-string">starred</span> <span class="hljs-string">=</span> <span class="hljs-literal">true</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span> 
      <span class="hljs-attr">name:</span> <span class="hljs-string">Tqla</span> <span class="hljs-string">Worm</span> 
      <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/tqla_worm.png</span>
      <span class="hljs-attr">description:</span> <span class="hljs-string">not</span> <span class="hljs-string">all</span> <span class="hljs-string">bugs</span> <span class="hljs-string">are</span> <span class="hljs-string">bad!</span>    
      <span class="hljs-attr">triggers:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
            <span class="hljs-attr">actor:</span> <span class="hljs-string">resolved_by</span>
            <span class="hljs-attr">action:</span> <span class="hljs-string">issue</span>
            <span class="hljs-attr">condition:</span> <span class="hljs-string">labels</span> <span class="hljs-string">in</span> [<span class="hljs-string">'bug'</span>] <span class="hljs-string">&amp;</span> <span class="hljs-string">reason</span> <span class="hljs-string">=</span> <span class="hljs-string">COMPLETED</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">achievement:</span> 
        <span class="hljs-attr">name:</span> <span class="hljs-string">Tqla</span> <span class="hljs-string">Sunrise</span>  
        <span class="hljs-attr">icon:</span> <span class="hljs-string">https://raw.githubusercontent.com/VauntDev/tqla/main/.vaunt/tqla_sunrise.png</span>
        <span class="hljs-attr">description:</span> <span class="hljs-string">a</span> <span class="hljs-string">shining</span> <span class="hljs-string">example</span> <span class="hljs-string">of</span> <span class="hljs-string">your</span> <span class="hljs-string">contribution</span> <span class="hljs-string">to</span> <span class="hljs-string">tqla!</span>    
        <span class="hljs-attr">triggers:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span>
              <span class="hljs-attr">actor:</span> <span class="hljs-string">author</span>
              <span class="hljs-attr">action:</span> <span class="hljs-string">pull_request</span>
              <span class="hljs-attr">condition:</span> <span class="hljs-string">merged</span> <span class="hljs-string">=</span> <span class="hljs-literal">true</span>
              <span class="hljs-attr">operator:</span> <span class="hljs-string">"|"</span>         
          <span class="hljs-bullet">-</span> <span class="hljs-attr">trigger:</span> 
              <span class="hljs-attr">actor:</span> <span class="hljs-string">reviewers</span>
              <span class="hljs-attr">action:</span> <span class="hljs-string">pull_request</span>
              <span class="hljs-attr">condition:</span> <span class="hljs-string">merged</span> <span class="hljs-string">=</span> <span class="hljs-literal">true</span>
</code></pre>
<p>You can check out the icons here. You can learn how to showcase any achievement you have earned with Vaunt by visiting and reviewing our <a target="_blank" href="https://docs.vaunt.dev/">docs</a>.</p>
<p>You can configure custom achievements on any GitHub repository by installing the Vaunt application through the <a target="_blank" href="https://github.com/marketplace/vaunt-dev">GitHub Marketplace</a>.</p>
<p>Go install it and vaunt your contributors!</p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>In conclusion, <code>tqla</code> is a powerful tool for building dynamic SQL queries. Leveraging Golang’s text templating <code>tqla</code> can help you overcome several challenges when working with dynamic queries.</p>
<p>In short, <code>Tqla</code> offers the following</p>
<ul>
<li><p><strong>Security:</strong> You can use text templating to generate SQL queries that are safe and secure. <code>Tqla</code> prevents SQL injection by replacing template variables with database placeholders.</p>
</li>
<li><p><strong>Performance:</strong> Text templating can help you to generate efficient SQL queries. Some query builders are not flexible enough to allow for the most optimal query. <code>Tqla</code> stays out of your way when building complex queries while still ensuring proper database argument parsing.</p>
</li>
<li><p><strong>Maintainability:</strong>  <code>Tqla</code> allows you to consolidate your query logic into a single template. Other solutions require the separation of conditional logic from statement building.  <code>Tqla</code> templates make it easy to express complex filtering and sorting criteria in your SQL queries.</p>
</li>
</ul>
<p>To stay in the loop on future development follow us on <a target="_blank" href="https://twitter.com/VauntDev"><strong>Twitter</strong></a> or join our <a target="_blank" href="https://discord.com/invite/mn29Xkvry2"><strong>Discord</strong></a>!</p>
<p>Don't hesitate to make feature requests.</p>
<p>If you want to see more examples of <code>tqla</code> feel free to reach out to us on our <a target="_blank" href="https://discord.com/invite/mn29Xkvry2"><strong>Discord</strong></a>or through <a target="_blank" href="https://github.com/VauntDev/tqla">GitHub</a>.</p>
<p><strong>mas tqla! - VauntDev.</strong></p>
]]></content:encoded></item></channel></rss>