Logo
    Search

    Hasty Treat - Old Browsers, Fallbacks and Polyfills - Part 2

    enOctober 22, 2018

    Podcast Summary

    • Challenges of implementing new CSS features while maintaining browser compatibilityConsider browser compatibility with tools like Can I Use, adapt with fallback strategies, and leverage resources like Vue School for comprehensive training and discounts.

      When it comes to implementing new CSS features, it's important to consider old browser support and fallbacks. In this episode of Syntax, Wes Bos and Scott Tawinski discuss the challenges of implementing CSS Grid, Flexbox, and other new features while maintaining compatibility with older browsers. They emphasize the importance of using tools like Can I Use to check browser compatibility and considering different fallback strategies. They also mention the value of resources like Vue School, which offers comprehensive Vue.js training and offers discounts for users from countries with lower than average purchasing power. Overall, the episode underscores the importance of staying informed about browser compatibility and being prepared to adapt to different development scenarios.

    • Checking CSS Grid browser compatibilityMajor browsers support CSS Grid, but Internet Explorer does not. No reliable polyfill exists for full capabilities, but simple layouts can be recreated with Flexbox as a fallback or use old Grid spec with prefixes.

      If you're looking to use CSS Grid for your website but are concerned about browser compatibility, it's important to check the support at caniuse.com. As of now, major browsers like Chrome, Firefox, Safari, and Opera have full support for CSS Grid, while Internet Explorer is the notable exception. Unfortunately, there isn't a reliable polyfill or JavaScript library to recreate the full capabilities of CSS Grid or Flexbox, which are also massive in terms of what they offer. However, for simple grid layouts, you might be able to recreate them using Flexbox as a fallback. For older browsers, particularly Internet Explorer, you can use the old Grid spec with browser prefixes, which can provide some level of support. Tools like Auto-prefixer can help convert new syntax to the old prefixes. Overall, it's crucial to understand the limitations of browser compatibility and plan accordingly when using advanced CSS features like Grid and Flexbox.

    • Supporting Grid and Flexbox in Older BrowsersUse JavaScript to detect unsupported browsers and serve compatible layouts. Don't punish users on older browsers, focus on functionality over pixel-perfection.

      When it comes to supporting modern web technologies like Grid and Flexbox in older browsers, there are several options. However, it's important to remember that users should not be punished for using outdated browsers. Instead, developers can create a separate layout for unsupported browsers or use JavaScript to detect the browser and serve a compatible layout. It's also essential to understand that websites don't need to look exactly the same in every browser, and users coming in on older browsers are likely used to the web not working perfectly. Ultimately, if you're not ready to fully support Grid and Flexbox, it might be best to hold off until you can provide a consistent experience across all browsers. Another key point discussed was the use of JavaScript to detect unsupported browsers. While it may be tempting to write specific code for Internet Explorer, it's more effective to use a JavaScript library to detect the browser and serve a compatible layout. Lastly, it's important to remember that websites don't need to look pixel-perfect in every browser, especially for users on older browsers. The focus should be on ensuring the website functions correctly.

    • Check for feature availability with tools like ModernizrModernizr helps developers write conditional CSS based on feature availability, streamlining the development process and providing a better user experience across browsers.

      Instead of focusing on specific browser compatibility, it's more effective to check for the availability of specific features using tools like Modernizr. This approach allows for more efficient and future-proof coding, as browsers continue to release new features behind flags that can be enabled with a simple toggle. In the past, developers had to deal with the complexity of browser prefixes and intentional misrepresentation of user agents by some browsers. However, modern browsers have moved away from prefixes, and new features are now typically released behind flags. Tools like Modernizr help developers write conditional CSS based on feature availability, making the development process more streamlined and less reliant on specific browsers. It's important to remember that there are various browsers beyond the popular ones, and focusing on feature detection rather than browser detection can lead to a better user experience for all.

    • Advancements in CSS and related toolsModern tools simplify coding for older browsers, CSS variables can be 'double defined' for unsupported browsers, and CSS Houdini offers custom CSS APIs for unique features

      Modern tools like auto prefixers have simplified the process of coding for older browsers by eliminating the need to manually add browser prefixes. This not only makes the code cleaner but also a non-issue. Another advancement in CSS is the use of CSS variables, which can be a challenge in unsupported browsers. In such cases, a "double define" method can be employed, where the variable is defined both with and without the prefix for browsers that support it. Additionally, the concept of CSS Houdini offers an exciting opportunity to create custom CSS APIs with JavaScript, allowing for the development of unique features not natively supported by browsers. This customization can lead to a more personalized user experience and even the creation of alternative CSS systems. Overall, these advancements in CSS and related technologies have streamlined the coding process and expanded the possibilities for web design.

    • Using CSS variables and Sass for dynamic and tailored designsCSS variables allow dynamic updates, while Sass variables are set during compile time. Double defining and @supports rule enable tailored designs for various browsers.

      CSS variables and Sass variables serve different purposes. CSS variables, also known as custom properties, can be changed in the browser with JavaScript, allowing for dynamic updates. Sass variables, on the other hand, are set during compile time and cannot be altered in the browser. When using CSS variables, developers can employ a technique called double defining, where they first set an element to display: block, followed by display: grid (if the browser supports grid). This allows the design to fall back to the display: block state in browsers that don't support grid. Another topic discussed was the use of the @supports rule, which functions similarly to media queries. Developers can check for specific CSS properties, such as flex or grid, and apply styles accordingly. This is useful for creating browser-specific styles or fallbacks. For instance, to check if a browser supports grid, you can use @supports (display: grid) { /* CSS styles for grid-supporting browsers */ } and @supports not (display: grid) { /* CSS styles for browsers that don't support grid */ }. This approach enables tailored designs for various browsers, enhancing the user experience. These techniques, along with others, demonstrate the versatility and power of CSS and its related technologies. As the web evolves, it's essential for developers to stay informed about the latest advancements and best practices.

    • Checking browser compatibility for CSS featuresUse 'supports' function to test for specific CSS properties and values, or check for CSS animations, variables, and prefixes. Consider audience and tailor efforts accordingly, with modern browsers like Edge leading the way.

      When it comes to checking browser compatibility for specific CSS features, there are various methods to use. For instance, you can check if a browser supports a certain unit like ch by using the 'supports' function with the property and value. You can also test for CSS animations, variables, and even specific prefixes. However, it's important to note that some older browsers, like Internet Explorer, may not support these features or the 'supports' function itself. As of now, the usage percentage of Internet Explorer 11 is 2.53%, while Edge is at 1.6%. Although it's almost gone, it's crucial to consider your audience and tailor your development efforts accordingly. Developers still face challenges in supporting older browsers, but the progress made by modern browsers like Edge is promising. Overall, understanding the capabilities and limitations of different browsers is essential for delivering a seamless user experience.

    • Considering the needs of older computers and browsersDevelopers should prioritize support for their audience, including older computers and browsers, while keeping up with technological advancements.

      While technology continues to advance, not everyone's needs or computer systems may require the latest and greatest. Older computers and browsers can still meet the basic requirements for many everyday tasks, such as using social media or managing business finances. However, it's important for developers to understand their audience and prioritize support accordingly. In the case of older browsers, there are resources and tools available to make supporting older JavaScript easier. In the next episode, the Syntax team will dive deeper into this topic. In summary, while it's important to keep up with technological advancements, it's equally important to consider the needs and limitations of your users.

    Recent Episodes from Syntax - Tasty Web Development Treats

    790: State of JS 2023 Reactions

    790: State of JS 2023 Reactions

    Scott and Wes dive into the 2023 State of JavaScript survey, breaking down the latest trends and pain points in front-end frameworks, build tools, and JavaScript runtimes. Tune in for their hot takes and insights on what’s shaping the JavaScript landscape this year!

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    789: Do More With AI - LLMs With Big Token Counts

    789: Do More With AI - LLMs With Big Token Counts

    Join Scott and CJ as they dive into the fascinating world of AI, exploring topics from LLM token sizes and context windows to understanding input length. They discuss practical use cases and share insights on how web developers can leverage larger token counts to maximize the potential of AI and LLMs.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    Scott and CJ chat with Paul Copplestone, CEO and co-founder of Supabase, about the journey of building an open source alternative to Firebase. Learn about the tech stack, the story behind their excellent documentation, and how Supabase balances business goals with open-source values.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 Who is Paul Copplestone?
    • 01:17 Why ‘Supa’ and not ‘Super’?
    • 02:26 How did Supabase start?
    • 08:42 Simplicity in design.
    • 10:32 How do you take Supabase one step beyond the competition?
    • 12:35 How do you decide which libraries are officially supported vs community maintained?
      • 15:17 You don’t need a client library!
    • 16:48 Edge functions for server-side functionality.
    • 18:51 The genesis of pgvector.
    • 20:59 The product strategy.
    • 22:25 What’s the story behind Supabase’s awesome docs?
    • 25:26 The tech behind Supabase.
    • 35:46 How do you balance business goals with open source?
    • 42:01 What’s next for Supabase?
    • 44:15 Supabase’s GA + new features.
    • 48:24 Who runs the X account?
    • 50:39 Sick Picks + Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    787: You Should Try Vue.js

    787: You Should Try Vue.js

    Scott and CJ dive deep into the world of Vue.js, exploring what makes this frontend framework unique and why it stands out from React and Svelte. CJ gives a comprehensive tour, covering everything from getting started to advanced features like state management and Vue’s built-in styles.

    Show Notes

    Vue.js: The Documentary.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    786: What Open Source license should you use?

    786: What Open Source license should you use?

    Scott and CJ dive into the world of open source, breaking down its meaning, benefits, and the various types of licenses you’ll encounter. From permissive licenses like MIT and Apache 2.0 to copy-left licenses such as GNU GPLv3, they’ll help you choose and apply the right license for your project.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    785: What’s Next for NextJS with Tim Neutkens

    785: What’s Next for NextJS with Tim Neutkens

    Scott and Wes dive into the world of Next.js with special guest Tim Neutkens from Vercel. They explore the latest updates, including the React Compiler and React Server Components, discussing their impact on developer workflows and the future of Next.js development.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 What does the React Compiler do?
    • 05:04 Will React Compiler help with managing Context?
    • 06:39 What happens if you’re not using a React Compiler?
    • 09:30 Will this work on any NextJS version?
    • 12:18 What are React Server Components?
    • 16:28 Shipping all the data inside an encapsulated component.
    • 20:17 Clearing up the frustrations around retrofitting server components.
    • 23:13 Handing migration.
    • 28:30 Is this just a fetch request with props?
    • 36:41 How closely are the NextJS and React teams working?
    • 41:53 Will we ever get Async Client Components?
    • 43:52 Async Local Storage API.
    • 45:31 Turbopack.
    • 57:51 Sick Picks & Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    784: Logging × Blogging × Testing × Freelancing

    784: Logging × Blogging × Testing × Freelancing

    In this Potluck episode, Scott and Wes tackle listener questions on modern blogging, website environmental impact, and using LangChain with LLMs. They also cover CSS hyphens, unit vs. integration testing, and balancing web development with new parenthood.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    Scott and Wes dive into the world of browser caching for audio files, exploring the File System API and the Cache API. They discuss size restrictions across different browsers, how tools like Riverside.fm leverage IndexedDB, and walk through code examples for creating, retrieving, and managing cached audio data.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    782: The Developer’s Guide To Fonts with Stephen Nixon

    782: The Developer’s Guide To Fonts with Stephen Nixon

    Scott and CJ are joined by Stephen Nixon of ArrowType to delve into the world of fonts and type for developers. They explore the intricacies of font creation, the utility of variable fonts, and offer tips for making visually appealing typography on the web.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    In this potluck episode of Syntax, Scott and CJ serve up a variety of community questions, from the nuances of beginner vs. advanced TypeScript to the pros and cons of SvelteKit. They also discuss falling out of love with React, shipping private packages via NPM, and the eternal struggle of always starting but never finishing projects.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    Related Episodes

    What's New in CSS? Variables, Scoping, New Selectors and Color Functions

    What's New in CSS? Variables, Scoping, New Selectors and Color Functions

    Wes and Scott talk about the future of CSS - what is new and what should we expect to be coming in the near future?

    Bug Replay - Sponsor

    You need to try out Bug Replay for recording and re-playing browser based bugs. It's a bug reporting tool that can be used at all stages of development and by anyone in your organization. Provide your dev team with detailed reports so they can fix bugs faster.

    Freshbooks - Sponsor

    If you are a small business or freelancer check out Freshbooks.com Cloud Accountingand get 30 days free. Make sure to enter SYNTAX into the "How did you hear about us" section.

    The Show Notes!

    03:30

    06:24

    19:20

    28:20

    31:00

    36:00

    • CSS Level 4 Selectors
    • ITS NOT CSS4!!!!!!
    • css4.rocks

    40:00

    • nth-of-selectoed
    • :nth-child(3n of img.dog)
    • div:has(img)

    44:00

    • Some not-so-new-but-still-cool units
    • Viewport Units
    • min-height: 100vh
    • ch units
    • ex units
    • CSS Angles - deg(), grad(), rad(), turn()

    Sick Picks

    Tweet us your tasty treats!

    2022 CSS Trends and Usage Web Almanac

    2022 CSS Trends and Usage Web Almanac

    In this episode of Syntax, Wes and Scott talk about some of the CSS Trends and Usage for 2022 as documented by the Web Almanac - and give some great cleaning tips along the way.

    Prismic - Sponsor

    Prismic is a Headless CMS that makes it easy to build website pages as a set of components. Break pages into sections of components using React, Vue, or whatever you like. Make corresponding Slices in Prismic. Start building pages dynamically in minutes. Get started at prismic.io/syntax.

    LogRocket - Sponsor

    LogRocket lets you replay what users do on your site, helping you reproduce bugs and fix issues faster. It’s an exception tracker, a session re-player and a performance monitor. Get 14 days free at logrocket.com/syntax.

    Freshbooks - Sponsor

    Get a 30 day free trial of Freshbooks at freshbooks.com/syntax

    Show Notes

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats

    Web Development in 2017 && a look ahead at 2018 🍾🍷

    Web Development in 2017 && a look ahead at 2018 🍾🍷

    What happened in web development in 2017? What were our personal and professional feats in 2017? What should we look forward to in 2018?

    Snipcart — Sponsor

    Snipcart allows you to create online shopping carts without any backend work. It's entirely client-side which means it's the perfect fit for anyone building a SPA in React, Angular or any other framework. Check out the full list of features over at Snipcart.com/syntax and sign up for three months free!

    Freshbooks — Sponsor

    If you are a small business or freelancer check out Freshbooks.com Cloud Accountingand get 30 days free. Make sure to enter SYNTAX into the "How did you hear about us" section.

    The Show Notes!

    02:00

    • Scott's 2017 Look Back
    • Scott is a new parent
    • Dealing with kids who don't sleep
    • Scott's Breakdancing Gains

    05:20

    • Wes' Look Back
    • Taking Health Seriously
    • First full year of Wes doing tutorials full time
    • Course Correction VS Goals
    • Course Platform Improvements
    • Lots of Email Marketing
    • Migration to Drip

    09:10

    • Scott cut ties with startup
    • 100% Invested in Levelup Tutorials
    • Major Platform improvements
    • New Payment Gateways
    • Lots of new Series - 400 videos!

    11:25

    • We Launched Syntax!
    • Thank you!
    • The show is getting good (we think?)

    13:50

    16:20

    • Goals for 2018
    • The Yacht Club
    • S.M.A.R.T. Goals

    18:00

    • Scott's 2018 Goals
    • More videos
    • More Youtube
    • Building a Set
    • Less Overtime

    20:35

    • Wes' 2018 Goals
    • Releasing lots and lots of Content
    • CSS Grid
    • VS Code
    • Some ideas around JavaScript and CSS Courses (tweet Wes your feedback)
    • If it's not a Hell Yes, it's a no
    • Double down on what works
    • New Checkout Experience
    • Delegate + Automate
    • Get faster at recording

    29:40

    • JavaScript in 2018
    • SSR Frameworks: Next.js, Gatsby, Nuxt.js
    • ParcelJS
    • Tooling is becoming less of a pain in the ass

    33:00

    • GraphQL Is Blowin' Upppppp
    • Typed Languages / Typings
    • Flow / Typescript / ReasonML / GraphQL Typings

    38:00

    • WordPress' Gutenberg Editor

    41:00

    • React Patent's Dropped
    • Vue became really popular

    45:30

    • CSS Changes!
    • CSS Grid
    • Firefox CSS Grid Dev Tools

    48:50

    • Componentized CSS
    • Design Systems
    • Figma
    • CSS Variables

    54:00

    • VS Code became very popular

    55:00

    • The Iron Yard shut down

    58:00

    • Progressive Web Apps

    59:00

    • What do we hope for in 2018?

    Sick Picks

    Tweet us your tasty treats!

    Hasty Treat - CSS Typography and Systems

    Hasty Treat - CSS Typography and Systems

    In this Hasty Treat, Scott and Wes talk about CSS typography, and how to quickly get up and running with type systems.

    Sanity - Sponsor

    Sanity.io is a real-time headless CMS with a fully customizable Content Studio built in React. Get a Sanity powered site up and running in minutes at sanity.io/create. Get an awesome supercharged free developer plan on sanity.io/syntax.

    Sentry - Sponsor

    If you want to know what’s happening with your code, track errors and monitor performance with Sentry. Sentry’s Application Monitoring platform helps developers see performance issues, fix errors faster, and optimize their code health. Cut your time on error resolution from hours to minutes. It works with any language and integrates with dozens of other services. Syntax listeners new to Sentry can get two months for free by visiting Sentry.io and using the coupon code TASTYTREAT during sign up.

    Show Notes

    05:00 - How do you define type at the start of a new project?

    15:03 - How do media queries and screen sizes affect your system?

    16:58 - Why are systems in type important?

    20:21 - How do you design a type system?

    • Scott’s type system:
     /* Font Sizes */   --baseFontSize: 1rem;   --baseNavSize: 0.64rem;   --smallFontSize: 0.8rem;   --smallestFontSize: 0.512rem;    --xtra-big-ass-heading: 3.052rem;   --xtra-heading: 2.441rem;   --heading-1: 1.953rem;   --heading-2: 1.563rem;   --heading-3: 1.25rem;   --heading-4: var(--baseFontSize);   --heading-5: var(--smallFontSize);   --heading-6: 0.64rem;   --heading-7: var(--smallestFontSize);  

    Links

    Tweet us your tasty treats!

    Potluck - Using Emoji in Naming × Project Estimates × Goal Planning

    Potluck - Using Emoji in Naming × Project Estimates × Goal Planning

    In this episode of Syntax, Wes and Scott answer your questions about whether you should use emoji in naming grid elements, how to estimate project times, responsive design tips, animating gradient backgrounds, and more.

    Linode - Sponsor

    Whether you’re working on a personal project or managing enterprise infrastructure, you deserve simple, affordable, and accessible cloud computing solutions that allow you to take your project to the next level. Simplify your cloud infrastructure with Linode’s Linux virtual machines and develop, deploy, and scale your modern applications faster and easier. Get started on Linode today with a $100 in free credit for listeners of Syntax. You can find all the details at linode.com/syntax. Linode has 11 global data centers and provides 24/7/365 human support with no tiers or hand-offs regardless of your plan size. In addition to shared and dedicated compute instances, you can use your $100 in credit on S3-compatible object storage, Managed Kubernetes, and more. Visit linode.com/syntax and click on the “Create Free Account” button to get started.

    LogRocket - Sponsor

    LogRocket lets you replay what users do on your site, helping you reproduce bugs and fix issues faster. It’s an exception tracker, a session re-player and a performance monitor. Get 14 days free at logrocket.com/syntax.

    Sanity - Sponsor

    Sanity.io is a real-time headless CMS with a fully customizable Content Studio built in React. Get a Sanity powered site up and running in minutes at sanity.io/create. Get an awesome supercharged free developer plan on sanity.io/syntax.

    Show Notes

    • 00:10 Welcome
    • 01:22 Shooting some pucks at the football game
    • 04:06 Should we use emoji naming conventions for our grid template areas instead of just words?
    • Screenshot of Grid question
    • 08:38 How do you estimate a reliable timeline for a project?
    • 12:18 Do you think about sustainable web development?
    • 16:24 What kind of tips and tricks around responsive design do you have?
    • 18:22 Sponsor: Linode
    • 18:55 How would you go about documenting your achievements throughout your career to reflect on during interviews and employee reviews?
    • 23:33 How do you plan long term for projects or goals?
    • Forever Jobless Goals worksheet
    • 28:22 Can you please make a fundamentals episode that only cares about clarifying the terms everyone assume to be well known to even beginner devs?
    • 22 Buzzwords Explained
    • 31:01 Sponsor: LogRocket
    • 32:20 How would one go about animating a gradient background based on mouse movement?
    • JavaScript 30
    • 38:13 Is there any way using the children API to render the close button and menu items in different locations in the menu component?
    • @Luke_lafr come on the show!
    • 42:04 Where should I begin with design systems?
    • 48:10 Sponsor: Sanity
    • 49:24 Is JSON always safe?
    • 55:01 SIIIIICK ××× PIIIICKS ×××

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats