# Kloud 9 Creative: full site content > Kloud 9 Creative builds brand presence through web and app development, design, and award-winning video marketing. This file contains the full text of https://kloud9creative.com/ for language models and AI agents. A shorter index is at https://kloud9creative.com/llms.txt. --- # I design experiences and develop solutions. > I design experiences and develop solutions. Web and app development, design, and award-winning video marketing. Visually striking, accessible, mobile-first products for the web, plus the brand and video work that gets them noticed. ## How can I help you? I specialize in web design and app development, design, and video marketing. As a multi-faceted creative, I'm a constant student, and these areas have been my focus for over 15 years. - **App Development**: SPAs, APIs and internal tools that simplify complex workflows. - **Web Development**: Fast, accessible sites built on modern JAMstack tooling. - **Design**: Branding, UI/UX, illustration and 3D that connect with your audience. - **Video Marketing**: Ideation through delivery, from commercials to event coverage. ## Featured project [B2B Sales & Social App](https://kloud9creative.com/development/b2b-sales-and-social-app.md): A ground-up rewrite of a sprawling 2012 B2B extranet. The original Webforms and Ext JS app was rebuilt on the existing database as a modern single-page app. ## Recent work A few things I've designed and built. - [B2B Sales & Social App](https://kloud9creative.com/development/b2b-sales-and-social-app.md): This was a large project that entailed re-writing and modernizing a B2B extranet that seemed to have every feature under the sun thrown at it when it was written in 2012. - [Product Configurator](https://kloud9creative.com/development/product-configurator.md): This project came about as a way to simplify the B2B selling process, and allow the end user or sales people to easily be able to configure custom storage options in a CTO world. - [3D Product Visualizer](https://kloud9creative.com/development/3d-product-visualizer.md): This project is product exploration and sales tool. The concept was to define specific products, 3d model them, then get them optimized to the point of being available to be viewed in a browser using a typical product... ## Recent writings - [robots.txt is not an AI policy, but it is the only switch most crawlers honor](https://kloud9creative.com/posts/robots-txt-is-not-an-ai-policy.md) (Oct 1, 2026): llms.txt tells an assistant what's worth reading. robots.txt is the file that decides whether a crawler is allowed to fetch it. Here's how I split those jobs on this site. - [What are llms.txt and llms-full.txt, and why is everyone adding them?](https://kloud9creative.com/posts/what-is-llms-txt.md) (Sep 25, 2026): AI assistants are terrible at reading websites built for humans. llms.txt is a small Markdown file that gives them a map. Here's what it is, what it isn't, and how I added it to this site. - [Thoughts on Astro Dot Build](https://kloud9creative.com/posts/thoughts-on-astro-dot-build.md) (Oct 21, 2021): There are a few paths you can take when dealing with the ever-evolving Javascript framework world. ## Interested in working together? Tell me about your project and I'll get back to you soon. - [Start a conversation](https://kloud9creative.com/contact) --- # Learn. Collaborate. Create. > Joshua Oas is a designer, developer and educator who spent 10 years teaching front-end development, motion design, 3D and video production. ## Teaching & building I’ve always enjoyed teaching, creating, and solving problems. I spent 10 years designing curriculum and teaching higher education courses in front-end development and design, motion design, 3D modeling, animation, and video production in the Madison, WI area. During that time, I also worked across film and video production, web development, IT, and marketing. I wore a lot of hats, from shooting and editing commercial work to building streaming systems for online courses, developing websites, managing Linux servers, supporting hundreds of Macs, and helping marketing and production teams make better use of technology. For the past 10 years, I’ve focused primarily on corporate IT and software engineering, designing, building, and supporting applications and systems that solve real-world business problems. I still enjoy the same mix of creativity, technology, and problem-solving that originally drew me to teaching and production. Outside of work, I enjoy writing music, getting outdoors, and hiking with my dog. ## Have a project in mind? - [Get in touch](https://kloud9creative.com/contact) - [See my work](https://kloud9creative.com/development) --- # Let's build something great. > Get in touch with Kloud 9 Creative about web development, design or video projects. Tell me a little about your project and I'll get back to you soon. ## Contact Use the contact form at https://kloud9creative.com/contact. --- # Engage, inspire, create. > Brand, UI/UX, illustration, 3D and tradeshow design. Clean design that speaks to its intended audience. Pixels, vectors and polygons, from stills to motion. I’ve spent years pushing pixels, crafting vectors, and sculpting polygons, but great design has never been about the tools. It’s about communication. Whether it’s a static visual, motion graphic, interface, or 3D asset, I believe design should have a purpose and speak clearly to the people it’s meant to reach. Strong design supports marketing, strengthens a brand, and helps communicate competence, consistency, and attention to detail. My work spans web development, video, motion, graphics, and other digital experiences, but good design connects all of them. No matter the medium, the goal is the same: create something intentional, effective, and genuinely useful to its audience. ## Selected work A gallery of 35 design samples, including: - sketch - T-rex model rendering - Tradeshow design and concept rendering - Tradeshow design and concept rendering - Website design layout example - vector design example - website layout for business - Tradeshow design and concept rendering - Tradeshow design and concept rendering - character design - Tradeshow design and concept rendering - character design - character design - character design - website design layout example for business in wisconsin - sketch --- # Client focused. Innovative solutions. > Client-focused web and app development. SPAs, APIs, headless CMS and JAMstack sites that solve specific problems and get results. That solve specific problems, and get results. I started building websites around 2002. What began as another creative outlet alongside making art and recording music gradually became the main focus of my professional career. Technologies have changed a lot since then, but the part I enjoy most hasn’t: understanding a problem, figuring out the right approach, and building something that delivers a meaningful result for a business and the people using it. For much of my career, I’ve worked across the JavaScript ecosystem, from front-end interfaces to server-side applications and APIs. Along the way, I’ve built plenty with PHP, ASP.NET, CMS platforms, and even Flash, Flex, and ActionScript. Since around 2015, my work has increasingly focused on modern application architecture, including single-page applications, API development, client- and server-rendered JavaScript, headless CMS platforms, and JAMstack approaches. Today, my focus has expanded beyond simply building applications to architecting proven, secure solutions that are practical, maintainable, and designed to solve real business problems. I enjoy looking at the bigger picture, choosing the right technologies and patterns for the job, and creating systems that can evolve with the needs of the business. I’ve always loved the intersection of design and development. I appreciate the technical work happening behind the scenes, but I care just as much about what someone experiences on the other side. A thoughtful interface, a smooth interaction, or a seemingly small design decision can make the difference between software that simply works and software that feels good to use. ## Projects - [B2B Sales & Social App](https://kloud9creative.com/development/b2b-sales-and-social-app.md): This was a large project that entailed re-writing and modernizing a B2B extranet that seemed to have every feature under the sun thrown at it when it was written in 2012. - [Product Configurator](https://kloud9creative.com/development/product-configurator.md): This project came about as a way to simplify the B2B selling process, and allow the end user or sales people to easily be able to configure custom storage options in a CTO world. - [3D Product Visualizer](https://kloud9creative.com/development/3d-product-visualizer.md): This project is product exploration and sales tool. The concept was to define specific products, 3d model them, then get them optimized to the point of being available to be viewed in a browser using a typical product... - [Restaurant Site](https://kloud9creative.com/development/restaurant-site.md): This project is a website for a Supper Club. They had a very dated site that was done through a company that went defunct, and needed something that allowed them to change menu options. - [Small Business Site](https://kloud9creative.com/development/small-business-site.md): This project is a site for a local tree service business. They needed a way to improve SEO, rank higher in searches, and an overall facelift of a dated site. - [Charity Organization Site](https://kloud9creative.com/development/charity-organization-site.md): This project is really started out as a challenge to see how JAMstack sites can perform for clients, rather than just personal sites. --- # Privacy Notice > Privacy Notice for Kloud 9 Creative. # Privacy Kloud 9 Creative is committed to protecting your privacy and developing technology that gives you the most powerful and safe online experience. This Statement of Privacy applies to the Kloud 9 Creative Web site and governs data collection and usage. By using the Kloud 9 Creative website, you consent to the data practices described in this statement. Collection of your Personal Information Kloud 9 Creative collects personally identifiable information, such as your e-mail address, credit card number, name, home or work address or telephone number. Kloud 9 Creative also collects anonymous demographic information, which is not unique to you, such as your ZIP code, age, gender, preferences, interests and favorites. There is also information about your computer hardware and software that is automatically collected by Kloud 9 Creative. This information can include: your IP address, browser type, domain names, access times and referring Web site addresses. This information is used by Kloud 9 Creative for the operation of the service, to maintain quality of the service, and to provide general statistics regarding use of the Kloud 9 Creative web site. Please keep in mind that if you directly disclose personally identifiable information or personally sensitive data through Kloud 9 Creative public message boards, this information may be collected and used by others. Note: Kloud 9 Creative does not read any of your private online communications. Kloud 9 Creative encourages you to review the privacy statements of Web sites you choose to link to from Kloud 9 Creative so that you can understand how those Web sites collect, use and share your information. Kloud 9 Creative is not responsible for the privacy statements or other content on Web sites outside of the Kloud 9 Creative Inc and Kloud 9 Creative  family of Web sites. ## Use of your Personal Information Kloud 9 Creative collects and uses your personal information to operate the Kloud 9 Creative Web site and deliver the services you have requested. Kloud 9 Creative also uses your personally identifiable information to inform you of other products or services available from Kloud 9 Creative and its affiliates. Kloud 9 Creative may also contact you via surveys to conduct research about your opinion of current services or of potential new services that may be offered. Kloud 9 Creative does not sell, rent or lease its customer lists to third parties. Kloud 9 Creative may, from time to time, contact you on behalf of external business partners about a particular offering that may be of interest to you. In those cases, your unique personally identifiable information (e-mail, name, address, telephone number) is not transferred to the third party. In addition, Kloud 9 Creative may share data with trusted partners to help us perform statistical analysis, send you email or postal mail, provide customer support, or arrange for deliveries. All such third parties are prohibited from using your personal information except to provide these services to Kloud 9 Creative and they are required to maintain the confidentiality of your information. Kloud 9 Creative does not use or disclose sensitive personal information, such as race, religion, or political affiliations, without your explicit consent. Kloud 9 Creative keeps track of the Web sites and pages our customers visit within Kloud 9 Creative, in order to determine what Kloud 9 Creative services are the most popular. This data is used to deliver customized content and advertising within Kloud 9 Creative to customers whose behavior indicates that they are interested in a particular subject area. Kloud 9 Creative web sites will disclose your personal information, without notice, only if required to do so by law or in the good faith belief that such action is necessary to: (a) conform to the edicts of the law or comply with legal process served on Kloud 9 Creative or the site; (b) protect and defend the rights or property of Kloud 9 Creative; and, (c) act under exigent circumstances to protect the personal safety of users of Kloud 9 Creative, or the public. Use of Cookies The Kloud 9 Creative web site use "cookies" to help you personalize your online experience. A cookie is a text file that is placed on your hard disk by a Web page server. Cookies cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you, and can only be read by a web server in the domain that issued the cookie to you. One of the primary purposes of cookies is to provide a convenience feature to save you time. The purpose of a cookie is to tell the Web server that you have returned to a specific page. For example, if you personalize Kloud 9 Creative pages, or register with Kloud 9 Creative site or services, a cookie helps Kloud 9 Creative to recall your specific information on subsequent visits. This simplifies the process of recording your personal information, such as billing addresses, shipping addresses, and so on. When you return to the same Kloud 9 Creative web site, the information you previously provided can be retrieved, so you can easily use the Kloud 9 Creative  features that you customized. You have the ability to accept or decline cookies. Most Web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. If you choose to decline cookies, you may not be able to fully experience the interactive features of the Kloud 9 Creative services or Web sites you visit. ### Security of your Personal Information Kloud 9 Creative secures your personal information from unauthorized access, use or disclosure. Kloud 9 Creative secures the personally identifiable information you provide on computer servers in a controlled, secure environment, protected from unauthorized access, use or disclosure. When personal information (such as a credit card number) is transmitted to other Web sites, it is protected through the use of encryption, such as the Secure Socket Layer (SSL) protocol. Changes to this Statement Kloud 9 Creative will occasionally update this Statement of Privacy to reflect company and customer feedback. Kloud 9 Creative encourages you to periodically review this Statement to be informed of how Kloud 9 Creative is protecting your information. Contact Information Kloud 9 Creative welcomes your comments regarding this Statement of Privacy. If you believe that Kloud 9 Creative has not adhered to this Statement, please contact us and we will use commercially reasonable efforts to promptly determine and remedy the problem. --- # Terms & Conditions > Terms & Conditions for Kloud 9 Creative. ## AGREEMENT TO TERMS These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) and Kloud 9 Creative ("Company", “we”, “us”, or “our”), concerning your access to and use of the kloud9creative.com website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”). You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY. Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Use at any time and for any reason. We will alert you about any changes by updating the “Last updated” date of these Terms of Use, and you waive any right to receive specific notice of each such change. It is your responsibility to periodically review these Terms of Use to stay informed of updates. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted. The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable. The Site is not tailored to comply with industry-specific regulations (Health Insurance Portability and Accountability Act (HIPAA), Federal Information Security Management Act (FISMA), etc.), so if your interactions would be subjected to such laws, you may not use this Site. You may not use the Site in a way that would violate the Gramm-Leach-Bliley Act (GLBA). All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site. ## INTELLECTUAL PROPERTY RIGHTS Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international copyright laws, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks. ## USER REPRESENTATIONS By using the Site, you represent and warrant that: (1) you have the legal capacity and you agree to comply with these Terms of Use; (2) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (3) you will not access the Site through automated or non-human means, whether through a bot, script, or otherwise; (4) you will not use the Site for any illegal or unauthorized purpose; and (5) your use of the Site will not violate any applicable law or regulation. If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof). ## PROHIBITED ACTIVITIES You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us. As a user of the Site, you agree not to: ## USER GENERATED CONTRIBUTIONS The Site does not offer users to submit or post content. We may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated in accordance with the Site Privacy Policy. When you create or make available any Contributions, you thereby represent and warrant that: 1. The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party. 2. You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use. 3. You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use. 4. Your Contributions are not false, inaccurate, or misleading. 5. Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation. 6. Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us). 7. Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone. 8. Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people. 9. Your Contributions do not violate any applicable law, regulation, or rule. 10. Your Contributions do not violate the privacy or publicity rights of any third party. 11. Your Contributions do not contain any material that solicits personal information from anyone under the age of 18 or exploits people under the age of 18 in a sexual or violent manner. 12. Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors. 13. Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap. 14. Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation. Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site. ## CONTRIBUTION LICENSE You and the Site agree that we may access, store, process, and use any information and personal data that you provide following the terms of the Privacy Policy and your choices (including settings). By submitting suggestions or other feedback regarding the Site, you agree that we can use and share such feedback for any purpose without compensation to you. We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions. ## SUBMISSIONS You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions. ## SITE MANAGEMENT We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site. ## TERM AND TERMINATION These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION. If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress. ## MODIFICATIONS AND INTERRUPTIONS We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site. We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith. ## GOVERNING LAW These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of the State of Wisconsin applicable to agreements made and to be entirely performed within the State of Wisconsin, without regard to its conflict of law principles. ## DISPUTE RESOLUTION Any legal action of whatever nature brought by either you or us (collectively, the “Parties” and individually, a “Party”) shall be commenced or prosecuted in the state and federal courts located in United States, Wisconsin, and the Parties hereby consent to, and waive all defenses of lack of personal jurisdiction and forum non conveniens with respect to venue and jurisdiction in such state and federal courts. Application of the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use. ## CORRECTIONS There may be information on the Site that contains typographical errors, inaccuracies, or omissions, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice. ## DISCLAIMER THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. ## LIMITATIONS OF LIABILITY IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ## INDEMNIFICATION You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) use of the Site; (2) breach of these Terms of Use; (3) any breach of your representations and warranties set forth in these Terms of Use; (4) your violation of the rights of a third party, including but not limited to intellectual property rights; or (5) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it. ## USER DATA We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data. ## ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means. ## CALIFORNIA USERS AND RESIDENTS If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254. ## MISCELLANEOUS These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use. --- # Video marketing. > Multi-award winning video marketing. Ideation, planning, production, editing and motion graphics. The next logical step after a great brand and a great website. Great visuals and a high-performing website are only part of the story. Video brings the rest of it to life. I’ve spent more than a decade working in video production, marketing, and education, helping nearly 1,000 students, professional teams, marketing departments, and television stations better understand the creative and technical sides of video. My experience covers the full production lifecycle: developing ideas, planning shoots, directing and working with on-screen talent, editing, motion graphics, delivery, and the technical work behind the scenes. Whether someone is completely comfortable on camera or would rather not be there at all, I know how to create an environment that gets the best result and produces content that feels natural, polished, and purposeful. ## Reel & recent work - [Cannabis](https://www.youtube.com/watch?v=AjpDB6xujQg) - [Fighter](https://www.youtube.com/watch?v=4s_V3lDAyb4) - [Sponsor Video](https://www.youtube.com/watch?v=l4qyxtZ_nNc) - [Sonic Boom 2016](https://www.youtube.com/watch?v=_F9uvavfWDA) - [Its your dream spot](https://www.youtube.com/watch?v=P6P39L7HBT4) - [Harlot](https://www.youtube.com/watch?v=wLa-YNaKDsg) - [ER Fest](https://www.youtube.com/watch?v=vqoABz17feY) - [Walking Dead](https://www.youtube.com/watch?v=GrkySpjyFgo) - [Woodstock](https://www.youtube.com/watch?v=fT0Cu5eXhyk) - [Janesville Renaissance Faire](https://www.youtube.com/watch?v=VOwJj_eOJ8I) - [GP Strategies](https://www.youtube.com/watch?v=u1kR6mRrm2E) - [Willy Porter](https://www.youtube.com/watch?v=bePC0LoDr-g) - [Digital Design Program](https://www.youtube.com/watch?v=aKJul9utfGY) - [Comicon Madison](https://www.youtube.com/watch?v=IJbW4GeYMeo) - [MMI Spot 3](https://www.youtube.com/watch?v=HCX44FJ8l7c) - [Statisticks](https://www.youtube.com/watch?v=hljxtl6rkdI) - [Moonbeam](https://www.youtube.com/watch?v=7-80fn6OB3Q) - [EAV](https://www.youtube.com/watch?v=ZmZz12eOiHE) - [Lev](https://www.youtube.com/watch?v=SzRHEA08zzk) - [Boom 2017](https://www.youtube.com/watch?v=DGoxV09Gx6E) - [Custom Design](https://www.youtube.com/watch?v=2nn-wBRHPPQ) - [Bluetooth](https://www.youtube.com/watch?v=8Av7_bboc6M) - [VMG](https://www.youtube.com/watch?v=qUTfXbN0hyk) - [Buyers](https://www.youtube.com/watch?v=eWyLDBk8WS0) - [Bailey](https://www.youtube.com/watch?v=vOJo6sptjXY) - [Sean](https://www.youtube.com/watch?v=PVgupkJI66Y) - [Eagle River Mudfest](https://www.youtube.com/watch?v=u3u94_zQbOU) - [Spot 4](https://www.youtube.com/watch?v=4tLn0FCAoVw) - [Networking Spot](https://www.youtube.com/watch?v=VT2_voGN1HE) - [Gettin Even](https://www.youtube.com/watch?v=8BcUGAjvpMQ) - [Holdsteady](https://www.youtube.com/watch?v=Zb5EPfzdyVU) - [Rival](https://www.youtube.com/watch?v=CyfssPp8bio) - [REC](https://www.youtube.com/watch?v=SBq7e1ZV0io) - [Monte](https://www.youtube.com/watch?v=ud4a_8JdnUM) - [Spot 2](https://www.youtube.com/watch?v=F2k5vXkkflg) - [Tribe](https://www.youtube.com/watch?v=G98dD5NY3oo) - [GAM](https://www.youtube.com/watch?v=CsCB2VI0eKs) --- # Notes from the studio. > Notes on web development, design, video and side projects. Web development, design, video and the occasional guitar project. ## Writings - [robots.txt is not an AI policy, but it is the only switch most crawlers honor](https://kloud9creative.com/posts/robots-txt-is-not-an-ai-policy.md) (Oct 1, 2026): llms.txt tells an assistant what's worth reading. robots.txt is the file that decides whether a crawler is allowed to fetch it. Here's how I split those jobs on this site. - [What are llms.txt and llms-full.txt, and why is everyone adding them?](https://kloud9creative.com/posts/what-is-llms-txt.md) (Sep 25, 2026): AI assistants are terrible at reading websites built for humans. llms.txt is a small Markdown file that gives them a map. Here's what it is, what it isn't, and how I added it to this site. - [Thoughts on Astro Dot Build](https://kloud9creative.com/posts/thoughts-on-astro-dot-build.md) (Oct 21, 2021): There are a few paths you can take when dealing with the ever-evolving Javascript framework world. - [The $68 Parker Fly Mojo Guitar](https://kloud9creative.com/posts/the-68-parker-fly-guitar.md) (Mar 27, 2021): I have fond memories of looking through 90s Guitar World magazines as a teenager and seeing the Parker advertisements with Reeves..... - [.NET Core Lab at Visual Studio Live Chicago 2019](https://kloud9creative.com/posts/asp-net-core-visual-studio-live-lab.md) (Sep 30, 2019): I recently hit up the 2019 Visual Studio Live in Chicago.... - [Giving the JAM stack a go Part 2](https://kloud9creative.com/posts/giving-the-jamstack-a-go-pt2.md) (Sep 29, 2019): I still haven't said what I used on this rebuild yet.... - [Giving the JAM stack a go Part 1](https://kloud9creative.com/posts/giving-the-jamstack-a-go-pt1.md) (Sep 22, 2019): This started out as one singular post as I build this site. It was to distract me from technicalities and worry about content.... - [Well, I launched the site....](https://kloud9creative.com/posts/the-site-is-finally-launched.md) (Sep 20, 2019): I finally decided to just switch the DNS over, call it live, and sort out the remaining issues. --- # B2B Sales & Social App > This was a large project that entailed re-writing and modernizing a B2B extranet that seemed to have every feature under the sun thrown at it when it was written in 2012. - Year: 2021 - Type: Internal B2B Sales Tool - Skills: Ideating, Planning, Project Management, Client Relations, Design, UI/UX, Front End Development, API Development - Technology: Javascript, Vue, Vuex, D3.js, Node/Express, .Net Core, MsSQL, Salesforce API, NGINX This was a large project that entailed re-writing and modernizing a B2B extranet that seemed to have every feature under the sun thrown at it when it was written in 2012. It was originally written with Webforms and Ext JS by another author, and both have been defunct for quite some time. This was re-written using the existing database, and decoupled into SPA architecture and APIs. Features: - Social Timeline/Posting/Photo Uploads - Order notifications and order-state tracker - Headless CMS Blogging functionality - Charting and reporting of sales data down to company, salesperson, year, and market - Multiple types of media and document libraries - Multiple types of returns and government contract orders - Business directory with interactive maps - Integration with Documents and Order materials from ERP system. --- # Product Configurator > This project came about as a way to simplify the B2B selling process, and allow the end user or sales people to easily be able to configure custom storage options in a CTO world. - Year: 2021 - Type: Internal B2B Sales Tool - Skills: Ideating, Planning, Project Management, UI/UX, Design, Product Design, Front End Development, API Development - Technology: Javascript, Vue, Vuex, Node/Express, Salesforce API, Bootstrap, NGINX This project came about as a way to simplify the B2B selling process, and allow the end user or sales people to easily be able to configure custom storage options in a CTO world. There was a ton of product definition, and explorative design thinking on size and design of the physical product before getting started. After everything was defined, I then 3D modeled and rendered all the individual product pieces that are displayed on the cards. What is being displayed in the stage is actually vector representations of the models, with inches translated to pixels for size adjustments on the different locker sizes. After an individual builds a custom configuration, they can submit the build which inserts them and their configuration into Salesforce as a lead. This project was built as a javascript single page application that communicates with an API for it's data. As a whole, I found this to be a pretty fun project to build, mainly due to the fact that I was involved in everything from product definition, specs, and designing every component that a user can insert into their build, all the way to logistics, development, and design of the app. --- # 3D Product Visualizer > This project is product exploration and sales tool. The concept was to define specific products, 3d model them, then get them optimized to the point of being available to be viewed in a browser using a typical product... - Year: 2021 - Link: https://reimagined.spacesaver.com - Skills: Ideating, Planning, Project Management, UI/UX, Design, 3D Modeling/Optimization, Product Design, Product Concepting, Front End Development, API Development - Technology: Javascript, React, Three.js, WP REST API, NGINX This project is product exploration and sales tool. The concept was to define specific products, 3d model them, then get them optimized to the point of being available to be viewed in a browser using a typical product line layout pattern. I'm quite happy with the look, feel, and polish of this application. Considering the technology, the focus was more on wow factor than the typical safe, corporate branding. I feel that some of the challenges that went along with it were trying to use the declaritive programming of Three JS inside of React's imperative style. It was extremely dificult to find examples to get ideas from at the time, and loading times for the actual 3D models in the browser was also a challenge. --- # Restaurant Site > This project is a website for a Supper Club. They had a very dated site that was done through a company that went defunct, and needed something that allowed them to change menu options. - Year: 2021 - Link: https://buckhornsupperclub.com - Skills: Ideating, Planning, Project Management, Client Relations, Design, UI/UX, Development, Photography - Technology: Javascript, React, Gatsby.js, Framer, Netlify, Netlify CMS, Bulma This project is a website for a Supper Club. They had a very dated site that was done through a company that went defunct, and needed something that allowed them to change menu options. The previous website was rarely updated, but when restaurants were allowed to open back up with limited capacity, it was hard to get certain items. They needed an official way, besides Facebook to be able to say what they were offering by the week. My initial thought was that the menu items would be changed more than anything, and then once the supply chain got better, the site wouldn't be updated as much. I didn't want to do a Wordpress site that would end up with outdated plugins and WP versions, so I opted for using Gatsby with Netlify CMS. This enabled them to easily modify the menu items by category, and modify specials on the homepage, as well as any of the other content on the site. --- # Small Business Site > This project is a site for a local tree service business. They needed a way to improve SEO, rank higher in searches, and an overall facelift of a dated site. - Year: 2021 - Link: https://lptree.com - Skills: Ideating, Planning, Project Management, Client Relations, Design, UI/UX, Development, Photogrqphy - Technology: Javascript, React, Gatsby.js, Framer, Netlify, Netlify CMS, Tailwind This project is a site for a local tree service business. They needed a way to improve SEO, rank higher in searches, and an overall facelift of a dated site. It wasn't something that is going to be updated a ton, but they needed content more than anything. I did a photo shoot on a job they had, proceeded to start brainstorming ideas for blog posts, and researching and writing blogs for them. I then built them out a site with all the content I amassed for the business to use. This project is using Gatsby, Netlify CMS, and hosted on Netlify. --- # Charity Organization Site > This project is really started out as a challenge to see how JAMstack sites can perform for clients, rather than just personal sites. - Year: 2019 - Link: https://distracted-kepler-0abeed.netlify.app/ - Skills: Ideating, Planning, Project Management, Client Relations, Design, UI/UX, Development - Technology: Javascript, Eleventy.js, Vue, Netlify, Netlify CMS, Bootstrap This project is really started out as a challenge to see how JAMstack sites can perform for clients, rather than just personal sites. As a whole, I've seen organizations need a site built, they need CMS editing ability, and the page builder options are confusing for them, then the site rarely gets updated. The idea of paying for a server instance, running a database, and backups seems out of scope in this scenario. After using different JAMstack technologies on various projects, and finding Netlify CMS, this was really my first shot at putting that into place for a client. It really was an instance of could I support an organizations needs using netlify, the tools I use every day, and not managing a server for them too forget about. After building multiple tests with Eleventy, I realized it would perform well, and take a ton of the GraphQL and React complexity out of the site while I was figuring out netlify CMS, but I did need to sprinkle Vue around the site for certain interactions that I needed to complete the solution. Overall, I'm happy with the solution, as is the client. It met their expections and went well above them. The goal was a community project to help the homless in the frigid Wisconsin winter, and I feel it achieved that! --- # robots.txt is not an AI policy, but it is the only switch most crawlers honor > llms.txt tells an assistant what's worth reading. robots.txt is the file that decides whether a crawler is allowed to fetch it. Here's how I split those jobs on this site. Published Oct 1, 2026 by Joshua Oas · Tags: AI, SEO A lot of the advice about AI crawlers treats `robots.txt` and `llms.txt` as the same kind of file. They are not. One is a permission list. The other is a map. Mixing them up is how sites end up blocking the assistants they wanted to help, or publishing a tidy index that nothing is allowed to fetch. ## What robots.txt actually controls `robots.txt` lives at the root of your site and is a convention, not a security boundary. Well-behaved crawlers fetch it before they fetch anything else and skip paths you disallow. Badly behaved ones ignore it. It has never been a lock. The useful part, for AI, is that the major labs publish user-agent names and say they honor the file: - `GPTBot` is OpenAI's training crawler. `OAI-SearchBot` and `ChatGPT-User` are the ones that fetch pages while answering a question. - `ClaudeBot` and `anthropic-ai` are Anthropic's crawlers. `Claude-User` is the fetch that happens during a chat. - `Google-Extended` is Google's control for Gemini training, separate from `Googlebot`, which still indexes the site for Search. - `PerplexityBot` and `CCBot` (Common Crawl) show up often enough to be worth an explicit line. The split that matters is training versus inference. Blocking `GPTBot` does not stop ChatGPT from fetching a page when someone asks about you. Blocking `Googlebot` to "keep Gemini out" also pulls you out of Search. Those are different products wearing similar names. ## A file that says yes to answers and no to training This is the policy I actually want: assistants may read the site while helping someone, training crawlers may not, and search engines may. That is expressible in the file, with the caveat that you are trusting each operator to use the user-agent they claim. ```text User-agent: GPTBot Disallow: / User-agent: Google-Extended Disallow: / User-agent: CCBot Disallow: / User-agent: * Allow: / Sitemap: https://example.com/sitemap-index.xml ``` `User-agent: *` is the fallback. Specific groups win over it, so the training bots above are blocked and everything else, including `ChatGPT-User` and `Googlebot`, is allowed. I also point at the sitemap in the same file, because that is the one place every crawler already looks. If you want the opposite policy, invert it. Disallow `ChatGPT-User` and `Claude-User` and your pages will not be fetched at answer time either. There is no third file that overrides this. ## What it does not do - It does not hide a page. Anything linked from the public web can still be fetched by a browser, a script, or a crawler that ignores the file. - It does not rank you. Search engines do not treat "I mentioned an AI bot" as a signal. - It does not describe your content. That is `llms.txt`, and an assistant that is blocked here will never read it. - User-agent strings change. The list above was right when I wrote it. Recheck the vendor pages before you copy it into production. ## Where the file lives It has to be at the root: `https://example.com/robots.txt`. A file in a subdirectory is ignored. Crawlers request it by that exact path, before they request anything else. On a static host, that is a text file in the public folder. On anything that generates routes, serve the same bytes from `/robots.txt` with `Content-Type: text/plain`. Do not put HTML around it, and do not redirect it. A redirect is one more request a crawler may not follow. The policy is the only thing in the file. Paths I do not want indexed, like draft previews, are disallowed by name. Everything else is allowed, and the Markdown alternates stay reachable, because an assistant that is permitted to read the HTML should also be permitted to read the `.md`. Keep it next to the rest of the site config, not buried in a CMS field you will forget. The failure I keep seeing is a production file that still lists a staging host, because someone edited a copy and deployed the other one. ## How to tell if it is working Fetch it yourself (`curl -A GPTBot https://example.com/robots.txt` only shows you the file, not the decision). The decision shows up in your logs: a blocked bot requests `/robots.txt` and then stops, an allowed one keeps requesting pages. Server access logs are more honest than any dashboard the vendor gives you. If a bot you blocked keeps requesting HTML, the file is doing its job and the bot is not. At that point the remedy is a firewall rule, not another line of text. --- # What are llms.txt and llms-full.txt, and why is everyone adding them? > AI assistants are terrible at reading websites built for humans. llms.txt is a small Markdown file that gives them a map. Here's what it is, what it isn't, and how I added it to this site. Published Sep 25, 2026 by Joshua Oas · Tags: AI, SEO, Astro More and more people find information by asking an AI assistant instead of typing into a search box. Ask ChatGPT, Claude or Gemini about a library, a product or a company, and there's a good chance it fetches a few web pages in the background, reads them and summarizes the answer. The problem: websites are built for people, not for language models. That's where `llms.txt` comes in, and why you're suddenly seeing it on so many sites. ## The problem it solves When an AI assistant reads your page, it doesn't see the design. It sees the raw page, and a typical modern page is mostly not content: - navigation, footers and cookie banners, - scripts, tracking code and inline styles, - content that only appears after JavaScript runs (which some fetchers never run), - the same header and footer repeated on every page. Language models also have a limited context window, which is the amount of text they can consider at once. If most of what they fetch is markup and boilerplate, the useful part gets crowded out or cut off. The result is answers that are vague, out of date, or confidently wrong about your product. Search engines solved a version of this decades ago with `robots.txt` and `sitemap.xml`. Those files tell crawlers what they may visit and what exists. Neither one tells an AI *what's important* or *where the clean version of the content is*. ## What llms.txt is `llms.txt` was proposed by Jeremy Howard of Answer.AI in September 2024, and the [spec](https://llmstxt.org/) got a v2 update in 2026 after two years of real-world use. It's a Markdown file at the root of your site (`/llms.txt`) with a simple structure: ```markdown # Site or project name > A one or two sentence summary. Optional paragraphs with any important context. ## Docs - [Getting started](https://example.com/start.md): Install and first steps - [API reference](https://example.com/api.md): Every endpoint ## Optional - [Changelog](https://example.com/changelog.md) ``` Only the H1 title is required. The blockquote is a summary, the H2 sections are lists of links with short notes, and a section called **Optional** holds links an AI can skip if it's short on space. The key idea is that the file stays small. It's a map, not the territory. The detail lives behind the links, and an assistant fetches only what it needs for the question it's answering. ## Clean Markdown versions of pages The spec also recommends offering a plain Markdown version of each page at the same URL with `.md` added. On this site, `/about` has `/about.md`, and every project and post has one too. Each HTML page points to its Markdown version with a link tag: ```html ``` Markdown is exactly the format language models handle best: headings, lists and links, with none of the layout noise. ## And llms-full.txt? `llms-full.txt` isn't part of the official spec, but it's become a common companion, popularized by documentation platforms like Mintlify. Instead of links, it contains the **full text** of the site in a single Markdown file. They serve different jobs: | | llms.txt | llms-full.txt | |---|---|---| | What's in it | A curated index of links | Every page's full text | | Size | Small enough to fit in context | Can be large | | Best for | An assistant answering one question | Loading a whole site or docs set into a coding assistant or project | Developers often paste an `llms-full.txt` into a coding assistant so it understands an entire library at once. For a small site like this one, the whole thing is only about 75 KB. ## Who's using it? According to the spec's site, thousands of sites now publish one, including the developer docs for OpenAI, Anthropic and Google. Platforms like Mintlify, GitBook, Wix and WordPress SEO plugins such as Yoast can generate it automatically. The spec also notes that Chrome's Lighthouse checks for one as part of its agentic browsing audits. The intended use is at **inference time**: an assistant reads it on demand while helping someone, rather than it being a training-data feed. ## What it isn't There's a lot of hype around this, so a few honest caveats: - **It's not a ranking signal.** No major search engine has said it uses `llms.txt` to rank pages. Normal SEO (good content, fast pages, clear structure) still matters most. - **It doesn't control crawling.** If you want to allow or block AI crawlers (like GPTBot or ClaudeBot), that's still `robots.txt`. - **No assistant is guaranteed to read it.** Support varies by tool and changes often. Think of it as making your site easy to read *if* an agent looks, not as a switch you flip. - **It's public.** Anything in it can be read by anyone. Don't put private information in it. ## How I added it to this site This site is built with Astro, and all its content lives in content collections, so I didn't want to maintain these files by hand. They're generated at build time: ```ts // src/pages/llms.txt.ts import { buildLlmsTxt, markdownResponse } from '@/lib/llms'; export const GET = async () => markdownResponse(await buildLlmsTxt()); ``` The builder reads every published page, project and post, and writes: - **`/llms.txt`**: the site summary, then sections for Pages, Projects and Writings, each a link to the Markdown version with its excerpt. Legal pages, the RSS feed and the full-content file go under **Optional**. - **`/llms-full.txt`**: every page, project and post as Markdown, each preceded by a comment with its source URL. - **A `.md` route for every page**, including the page-builder pages, whose sections get converted into headings, lists and links. Because it's generated: - drafts never show up (including this post, until I publish it), - new posts and projects appear automatically on the next build, - nothing gets out of date. I also made sure it only includes what's already public on the site. No email or phone number, and nothing from the CMS that isn't shown on a page. ## Should you add one? If you run documentation, a product site or anything people ask AI assistants about, yes. It takes an hour or less, it costs nothing, and it makes your content easier for agents to read accurately. For a personal site, it's a nice-to-have. If you're on a static site generator, generate it from your content instead of writing it by hand. Then forget about it. You can see mine at [/llms.txt](/llms.txt) and [/llms-full.txt](/llms-full.txt). --- # Thoughts on Astro Dot Build > There are a few paths you can take when dealing with the ever-evolving Javascript framework world. Published Oct 21, 2021 by Joshua Oas · Tags: Javascript There are a few paths you can take when dealing with the ever-evolving Javascript world. You could either get disgruntled at all the constantly changing advancements and frameworks, or find one that excites you and toy around with it while it's still in beta. I tend to hold off a little bit now and wait to see how things are adopted and grow before spending a bunch of time on a brand new technology. I think I'm gonna waive that rule and jump in a little early on Astro. I have been primarily working in both React and Vue since right around their first releases. I tend to go for Next for SSG and SSR usecases, and use Vue for SPA apps. This has turned me into more of a generalist with both, but I don't like forcing a framework into a spot where a better option could be selected. This has left me with a bunch of previously-built feature components in both frameworks to use in future scenarios, and the thing that excites me is being able to use both in Astro! The other thing that excites me is shipping with no blocking Javascript. I used Eleventy for a few projects a couple years ago. One of them was this site when I moved it off of Wordpress. I really enjoyed the quick build times and lighthouse scores improvements while working with it. The thing I didn't like was taking previously-built React or Vue components and converting them all over to Nunjucks templates. It was much easier with the Vue components, but converting JSX back to HTML is a waste of time in my opinion. I think being able to easily use your components, while maintaining quick, non-blocking load times is definitely the way of the future. My guess is that with how fast Next comes out with updates, new features, and generally has the best developer experience out right now, they are going to adopt the Astro build with no JS aspect into a future release very soon. Hopefully things keep growing with Astro, the idea of not being tied to one framework is a great idea, and I'm definitely going to keep building some test projects with it as it grows! Give it a try [HERE](https://docs.astro.build/getting-started/) --- # The $68 Parker Fly Mojo Guitar > I have fond memories of looking through 90s Guitar World magazines as a teenager and seeing the Parker advertisements with Reeves..... Published Mar 27, 2021 by Joshua Oas · Tags: Music I have fond memories of looking through 90s Guitar World magazines as a teenager and seeing the Parker advertisements with Reeves Gabrel’s from David Bowie, and Dave Navarro from Jane’s Addiction. Occasionally I would venture to the Guitar Center in Arlington heights to drool over and play these guitars that I couldn’t afford at the time. Something about a \$4,500 guitar in 1994 that looked like it was from the future at the time, it still does in 2021, and it intrigued me. Over the years I have somehow acquired five USA-made Parker’s, and still get that teenager feeling when I come across one, which is rare, considering they aren’t made anymore, and the ones for sale are expensive. Music is something that has occupied my time and has given me sanity for a long time. I seemed to have lost that spark when focusing on my career for quite some time though. The idea of nobody really being interested in music, the streaming sites, and the general population's lack of caring about artists anymore just kind of got me down for a while. Spending all my free time learning new things and bettering my skills that I use professionally is a good thing, but if that becomes the majority of what you do, it can bring you down pretty quickly. Buying a new toy has always seemed to give me a little inspiration, and projects to learn something new do as well. This guitar happens to cover both those bases. This guitar was posted on eBay for roughly 7 minutes before I saw it and immediately clicked buy. This listing is the exact thing I have been looking for since eBay was launched way back when. The individual selling the guitar stated that the neck has a twist, there is no truss rod, and he got bored with the project. I have no idea how he did what he did to the guitar without realizing the Parker Fly has a slightly hidden truss rod that is made from a piano wire inside. After the guitar showed up, I realized that the neck was snapped off, then the individual glued it back on, with a ton of epoxy, and just my luck, it was completely crooked. There are a list of things I figured out once the guitar showed up, these include: - The Truss rod functions - No pickups, electronics, knobs, or switches - No bridge, the one that came with it was a lockdown bridge that was for another Parker model - A fret was missing - No tuners - The neck was snapped off at the body and repaired wrong - The headstock was snapped off and repaired Right - The top horn on the body was snapped off and repaired - There appeared to be a small piece of wood missing between the neck and the neck pickup - The guitar never had the smaller secondary holes for the Sperzel tuners that it was supposed to come with from the factory After looking at this guitar closer once it arrived, it appears there are no wiring holes internally, which probably means this thing was thrown out at the factory for a defect, and somehow it’s former owner acquired it. The only thing standard on a USA Parker might be just the tuners and the strings. The frets are custom and stainless, not built like other frets. The bridge is custom, the pickups are custom wound due to it being the thinnest and lightest guitar ever made. The electronics are custom, and the body has a carbon fiber shell on the back to help reinforce it. I needed to find parts, so I scoured reverb and eBay sourcing these scarce parts to Make this thing work. I found some custom wound Dimarzio’s specifically for this model. Found a roll of Parker fret wire, found electronics, pots and switches out of a USA Nitefly, and had some Sperzel tuners that I donated from another Parker I own. The problem was the bridge. I couldn’t find a bridge anywhere, and even worse, the Fly tremolo system uses strange, flat, bent springs that are completely impossible to find. The springs change out with the string gauge and it is quite an odd system. I’m not sure how he set the neck without tuners on it, but after further inspection, it was clear that the neck would have to be separated and set right. The neck was very straight, the truss rod worked, it was just set cockeyed and it was dive-bombing. I realized quickly that this would be above my skill level, so I reached out to a friend named Travis that is a tech. He did an amazing job so far on this thing! The neck is now set, and insanely straight. I hunted down some mahogony and he did a great job on the neck repair, replacing the piece of missing wood, the bridge, and tuners are on, and the action is insanely low! Currently I am working on getting the body cleaned up before moving on to electronics! --- # .NET Core Lab at Visual Studio Live Chicago 2019 > I recently hit up the 2019 Visual Studio Live in Chicago.... Published Sep 30, 2019 by Joshua Oas · Tags: NETCore ### Why did I go to Visual Studio Live? Well, I do find value in solving business problems with a proper typed language. Even if at the moment, I mostly write JavaScript. A few years ago, I worked at a .net shop as a front-end dev, but I was the guy that preferred Mac OS and Linux servers. I would build small tests on my Mac at night using .NET Core 1.0 and React. It would mainly be small APIs with JS front-ends, or building out multi-page sites with razor in the views, nothing major, but I was interested. It seemed to satisfy the need of learning something new for personal gain, not production. I appreciated the fact that Microsoft finally open sourced something to increase their developer base beyond corporate America, and I thought thought it had a future. Enough of the history. After a super late night making sure my machine was ready for this event, and three hours of sleep, I made it! Disclaimer: I realize three hours of sleep and mental focus do not go together. ##### I get off the train, walk 10 blocks, hail a cab.... I’m immediately thrown into an Egyptian cabby vs. Egyptian cabby "I kick your ass at backgammon every day at lunch" argument at a stop light. It made my day, and was entertaining. Two complete characters that have a bond even though they are halfway across the world together now, and I haven’t thought about backgammon since I played it as a child in the 80s. Kinda cool! ## I pull up to the Swissotél at the end of Wacker drive, I’ve never been inside there before, but the impressions on arrival were good, and I was 15 minutes early! I get checked in, get a complimentary backpack, and buy a polo, even though I'm not a polo guy. I thought it was odd that all the other conferences I’ve been to have t-shirts and the Microsoft conference had Polos. (: I bought one anyway, but I still refuse to wear khakis. I scoped out the coffee and breakfast sandwiches, and found a seat. I then realized I was in a sea of Microsoft fans.... ## So, what’s the agenda for the day? It was a full day workshop called "Develop and ASP.NET Core 2 App with EF Core 2 in a day." The presenter was a guy named Phil Japikse who has authored tech books on the Windows stack, runs a consultancy etc. He seemed like a really nice guy from my talks with him on breaks. I appreciated the fact that he spent almost two hours explaining the upgrade path and versioning of this whole .NETCore thing to all the attendees. Some had apps in production not using the .1 LTS versions, and most seemed like they weren’t really sure where this whole thing was going in the future, but we’re finally willing to give it a shot. His lengthy description and breakdown of how they can move forward seemed to clear up a ton of confusion. Most of the Microsoft stack devs I have worked with in the past have seemed leary on where this was going, and didn’t really care to explore it because it was some open source thing that worked on other operating systems, and they were content just using MVC 5 for the rest of eternity. I always found that odd, but in a way, this whole .NETCore upgrade path thing seems kinda like the volatile nature of the JavaScript framework ecosystem, or like the Angular version thing that makes people not want to use it anymore. So, it makes sense on why I’ve heard things like that be mentioned. The day as a whole went well, and I learned quite a bit. It’s something I’ll probably continue to learn more about, as I do feel there is definitely a need for this. It seems Microsoft’s main intention with this was to try and get more developers that have jumped ship to more modern stacks to switch back, and improve the server cost thing by allowing apps developed on the platform to be able to run on other servers instead of just IIS, which is really what intrigued me over the whole thing. I tend to look at the architecture and monthly costs, That will accrue from a standpoint of a small business site, rather than thinking of things from disposable budget and Windows servers everywhere point of view. --- # Giving the JAM stack a go Part 2 > I still haven't said what I used on this rebuild yet.... Published Sep 29, 2019 by Joshua Oas · Tags: JAMStack ## I'm giving the JAMstack a go part 2. # Looking for [Part 1?](/posts/giving-the-jamstack-a-go-pt1/) ## I spent a fair amount of time and effort in framework exploration while rebuilding this site. I swear I've built it about 70% of the way in five different technologies, before finally settling on something and completing it. It was more of a matter of finding something that I don’t use regularly at work, see if I enjoy building in it, and if it works for a server rendered, SEO friendly site. The old site was built in Wordpress, just using Custom Post Types for posting portfolio projects. I never really spent much time on blog posts, and honestly, I built it about four years ago, so, it was definitely time for an revamp, and a new focus on content. I initially used Tachyons as the CSS framework on the old site. It served its purpose, but for this one, I wanted to explore it with no framework, and using CSS grid to build things out. It's my site, and I don't necessarily have to answer to people In some random department, that for some reason still use IE. ## The first thing I built my site in was Flask. At the time, I was doing a ton of web scraping at work, and still using Python for that. I was unsure about hosting Python apps, and haven't really explored using Gunicorn and NGINX together at the time. I liked the framework, and the idea was to use Flask and SQLite together for a small, quick, performant site. In the end, I liked it, but I don't like the pain of PIP and Virtual Environments. I just ended up noticing the similarities to Express, and longing for npm every time I worked on it. For the second iteration, I used Next.js. It seemed like a great choice, and while I'm quite familiar with create-react-app, it seemed like the next logical step. At the time I was still interested in keeping my Wordpress install if I was going to go the static generator route, but just using it as a cached REST API for my content. I feel this is where my flaw was at the time. I seem to remember building multiple versions of the API request to the archive post list endpoint, then querying the single by slug in create-react-app, but not being able to get the slug pages to generate when I transferred my test I built in create-react-app to Next.js. Either I couldn't find a decent example implementing Wordpress, or some odd limitation that worked in the SSR build, but not with the static generator. The actual reason fails me, but that's what I'm remembering about the experience. This made me move to Gatsby. ## I really liked working with Gatsby, the community, the backing, the themes, the Wordpress integration, awesome! What I didn't like was I was finally getting sick of trying to force React into everything I worked on, just for the sake of using it. I also wasn't entirely sold on GraphQL. The foreign concept of edges and nodes, and lack of companies using it in production at the time compared to a traditional API made me question that as the answer to my tech stack for the project. I feel it's something I'll explore more in the future, but not for this project. This made me shelve the Gatsby site, and move to building two more iterations in two different technologies simultaneously. I chose Nuxt for one version, and Express backed by a SQLite DB for the other. Nuxt definitely rocks, and I felt most at home using it, as my go-to stack at work For new projects is Vue, Node and MSSQL. My speed of productivity with these two technologies exceeds the rest of the frameworks I've mentioned in this post, and I could hammer things out quite quickly. ## Does this satisfy my need of finding something I don't use regularly at work to build this with? It sure doesn't. If I remember right, Somewhere around this time, I stumbled into somebody talking about Eleventy on Twitter. What is this Eleventy thing that didn't get 15 million in backing? Hmmmmm, I looked further, "I'm familiar with Liquid from some Shopify development I've done, but what the hell is Nunjucks?" Intriguing, so you mean to tell me that this Nunjucks thing is pretty much Just like EJS or Jinja2, just clean HTML with Logic? I don't have to deal with find and replace everything ' class=" ' to ' className=" ', one node script to build, and the builds are screaming fast, just like the end user load times? Sold! ## The whole process of building this thing in Eleventy was super enjoyable! I did have two slight hang ups though. I was thinking about actually spending time writing posts on my site, gasp, I'll make another post about that. What if I actually do it, and I have so much content that I need pagination? I tried everything under the sun trying to get pagination to work from multiple markdown files. The docks on pagination weren't really making sense for my use-case, BUT! That specific section was kindly revamped at the same time I was having my issue, crazy! I still wasn't able to get it to work the way I wanted to in the end, but I guess I'll keep working on it. As a whole, the framework is super fun to work with, and I really enjoy the simplicity of it! --- # Giving the JAM stack a go Part 1 > This started out as one singular post as I build this site. It was to distract me from technicalities and worry about content.... Published Sep 22, 2019 by Joshua Oas · Tags: JAMStack ## After much deliberation, I decided to give it a shot. This started out as one singular post as I build this site. It was to distract me from technicalities and worry about content. Then the more I thought about it, I'm gonna make it a series on what I learn, things I like, or dislike, best use cases etc. I'm using this as a reason to write. So, this is a tool to get me to write my thoughts, own my own content, and learn something new, score! ### What is the JAM Stack? It stands for JavaScript, APIs, and Markdown, and I do believe it won me over for certain use cases. After all, It sounds like they gave a name to most projects I've been building at night for the last few years. Around 2014 or 2015, I decided to build random things with Rails in my free time. I started playing around building a blog that never saw the light of day with Jekyll. I thought Jekyll was cool at the time, but it seemed like something I could never offer to a client, and I never really enjoyed Ruby, So, I forgot about the whole markdown as content thing until I started playing with Gatsby in 2017 or so. Gatsby was another one, where I thought "this is cool, but how would I offer this to a client?" I do believe I’ve reached a point where I don’t really care about the client thing. I just wanted to redo the site I haven’t touched in 4 years or so, and It’s definitely a shoemaker’s kid scenario going on. After years of dealing with, or inheriting enough troublesome Wordpress sites, I decided, why would I want my personal site done with such bloat? Don't get me wrong, Wordpress is a great platform, but I'm happy that there are communities out there that are trying to make the web advance from that, or at least work with it to improve it. I’ve spent The majority of the last 4 years or so building in Node, React, or Vue. If I deal with WordPress now, it’s cleaning up a hacked site, or fixing something broken. Every new thing I’ve built in that time period has utilized the [REST API](https://developer.wordpress.org/rest-api/), if WordPress has any part in it. I like the idea of ditching the PHP view layer. So, this seemed kind of like the perfect thing in my book. So, why isn’t this bloated? It actually does the build beforehand, and compiles everything to static pages. There is no waiting for a request to the database when the user hits a page endpoint. Seems pretty cool, my initial concerns were "what if I have to have gated content behind a JWT or session?" And "I have to make things easy for a client, markdown is not the answer." Again, I’m so used to building things for marketing teams or clients, I was confusing my own personal needs with a "this needs to work for everything or it’s garbage attitude." I just needed to take a step back and solve the problem at hand. I’m just getting used to this blogging thing again, so check out the [second post!](/posts/giving-the-jamstack-a-go-pt2/) for more info on what I used on this site. I've also attached a pretty good talk "JAMstack Fundamentals: What, What and How? With Phil Hawksworth" if you're interested in learning more about it.
--- # Well, I launched the site.... > I finally decided to just switch the DNS over, call it live, and sort out the remaining issues. Published Sep 20, 2019 by Joshua Oas · Tags: JAMStack ## I finally decided to just switch the DNS over, call it live, and sort out the remaining issues. So, what did I have issues with? The main thing I had issues with was completely ditching a CSS framework and coming up with a custom CSS Grid to use on the site. This was something that I really wanted to do, and a driving force behind the whole rewrite. This caused random issues with spacing and rotation on mobile, basically things I haven’t really had to deal with since before the time the CSS frameworks did all that stuff in boilerplate. 😁 I really didn’t want to use Bootstrap or anything on it. The only one I was considering was Tailwind, but I’m the end, I didn’t want to waste more time figuring out all the tailwind classes either. ## No CSS framework it is! I’ll basically spend some time sifting through this thing and improving random bugs. I also decided to use gulp to compile my SCSS. I haven’t used Gulp in a few years and found out that version 4 changed a bunch of stuff. I didn’t really want to use Webpack, as I was trying to be as minimal as possible in my build configuration, and I feel I wasted too much of my life already configuring Webpack before it started being included in all the CLIs around 2016 or so. What a horrible time that was, spending more time getting your build tools to function than actually writing what you were supposed to be writing, I don’t miss that at all. I still need to sort out pagination with posts coming from multiple files. It’s something I’ll deal with as I get more posts on here and deem it a necessity. ## I decided to also implement a dark mode feature on here when I was about 85% done with the site. I should have thought of that earlier. I basically wanted to figure out how to do it without using a SPA framework to hold the state. After some searching, and trial and error, I figured out how to save the dark mode prefs in localStorage so it sticks on page refresh, and make the mode be dark by default if light mode isn’t specified. Kinda cool, at least I was excited about it. I haven’t really used localStorage on a multi-page before, so at least I learned something! It’s definitely not something to spark up a conversation with a stranger about though. ## The other fun feature I ended up incorporating to the site was a way to search blog posts. I wasn't initially sure how to do this with a static generator framework. How would I search static pages and get dynamic results? There are paid options with free tiers out there that I found, one of those was Algolia. I opted to have a small Vue app on the blog archive page, and use Eleventy to generate a searchable .Json file out of the collection. Vue then uses this file to filter through the results. Kinda fun! It's basically a ripped apart and modified version of the search on the Seven theme for Eleventy. I haven’t really decided if I’m going to implement Netlify CMS on it or not. It’s not something I totally need on here, as I’m kind of enjoying the workflow of updating it with a combination of Apple Notes and WorkingCopy on my iPad or phone so far. I am in the midst of building a client site using the JAMStack and Netlify CMS at the moment though. I might possibly go through a switch things over to the CMS after I’m done with that. I’m pretty happy with it overall though, even if I know I still have things to sort out. I do feel I will enjoy writing on this platform, and it will occupy some time I would have wasted on a social media platform!