Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
149121 stories
·
33 followers

GeekWire Podcast on location at OpenAI in Bellevue, with CTO of Applications Vijaye Raji

1 Share
Vijaye Raji, OpenAI’s CTO of Applications, speaks at the company’s Bellevue office opening. (GeekWire Photo / Todd Bishop)

OpenAI just opened its largest office outside San Francisco, in downtown Bellevue, Wash., and we were there for the grand opening to tour the space, check out the vibe, and record this week’s GeekWire Podcast.

Chatting inside the OpenAI game room, we share our observations about the Mad Men-meets-Pacific Northwest aesthetic — which features open floor plans and a wide variety of common areas — and try to figure out what it all says about OpenAI’s culture. 

Plus, a conversation with Vijaye Raji, former Statsig CEO and now OpenAI’s CTO of applications, about Codex, infrastructure, hiring, and the evolution and growth of Silicon Valley tech giants in the region. 

In our final segment, it’s the return of the GeekWire trivia challenge, with a question focusing on one of the earliest tech giants to establish an outpost in the Seattle area. 

‘Hard to imagine going back’

One of the most interesting moments in the conversation with Raji came when he described how OpenAI’s own Codex tool has changed his day-to-day work, to the point where he’s personally making software again, or at least he’s prompting the software to make software.

“Codex has made coding a lot more delightful,” Raji said. “I’m back coding.”

He described a new daily rhythm: “Before you hop into a meeting, you ask it to go do a set of tasks, and then you jump into a meeting, and then when you come back, it’s done, and then you review it,” he said. “It’s so cool.”

OpenAI CTO of Applications Vijaye Raji (left) and Bellevue Mayor Mo Malakoutian just after cutting the ribbon at the opening of OpenAI’s new Bellevue office. (GeekWire Photo / Todd Bishop)

Internally, Raji said teams using Codex are seeing 2-3x productivity gains in terms of code output. Beyond engineering, the tool has found its way into marketing, sales, and operations.

“It’s very hard for me to imagine going back to the way we used to write code anymore,” he said. “It’s fundamentally changed.”

OpenAI’s Codex, which got a Windows app this week, is part of an explosion of AI coding tools including GitHub Copilot (Microsoft), Amazon Q Developer, Google’s Gemini Code Assist, Anthropic’s Claude Code and others, all promising significant developer productivity gains.

A template for other OpenAI offices

As for the Bellevue office, Raji sees it as a potential model for OpenAI’s expansion elsewhere. The proximity to San Francisco headquarters, the shared time zone, the short distance from OpenAI partners Microsoft and Amazon, and the depth of local infrastructure talent make it an ideal test case.

A seating area at OpenAI’s new Bellevue office, featuring the retro-modern aesthetic that runs throughout the space. (Trevor Tondro Photo for OpenAI)

“If we can make Seattle very, very successful, we can take that formula and apply it to more offices,” he said.

OpenAI currently has 250 employees in Bellevue, with room to grow to 1,400. The office houses teams working on infrastructure, ChatGPT, research, advertising, and partnerships.

Raji will be speaking at GeekWire’s AI event, Agents of Transformation, March 24. More info and tickets.

Subscribe to GeekWire in Apple Podcasts, Spotify, or wherever you listen.

Related coverage: Inside OpenAI’s new Bellevue office: A swanky statement about AI’s impact on the Seattle region

Audio editing by Curt Milton.

Read the whole story
alvinashcraft
44 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

OpenAI delays ChatGPT’s ‘adult mode’ again

1 Share
The feature, which will give verified adult users access to erotica and other adult content, had already been delayed from December.
Read the whole story
alvinashcraft
44 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

How to Center Any Element in CSS: 7 Methods That Always Work

1 Share

Centering elements in CSS often seems straightforward at first, but it quickly becomes confusing once you start building real layouts. A property like text-align: center; works perfectly for text, yet it fails when you try to center an image or a block element.

Then you experiment with margin: auto;, which centers a div horizontally but doesn’t help with vertical alignment. Before long, you find yourself searching through solutions involving Flexbox, Grid, transforms, and other techniques that appear complicated and inconsistent.

The reality is that CSS does not provide a single universal property that can center everything. Instead, each layout scenario requires the right method, and understanding when to use each technique is the key to mastering CSS centering.

Table of Contents

First: Understand the Two Types of Centering

Before diving into centering techniques, it’s important to understand the two types of centering in CSS, because different methods work along different axes. CSS layouts operate on two axes: Knowing which axis you want to center along helps you choose the right approach.

There are two axes in CSS layout:

Axis

Direction

Horizontal

Left to Right

Vertical

Top to Bottom

When someone says “center this element”, they usually mean one of four things:

  • Center text inside a container

  • Center a block horizontally

  • Center vertically

  • Center both horizontally and vertically

Each requires a different solution.

Method 1: Center Inline Content (text, inline elements)

This method centers inline content such as text, links, inline images, and sometimes buttons, using the text-align: center; property. This is the simplest centering method in CSS, but it is often misunderstood because it only affects the content inside a block container, not the container itself.

Example

<div class="box">
  <h2>Hello World</h2>
  <p>This text is centered.</p>
</div>
.box {
  text-align: center;
  border: 2px solid #444;
  padding: 20px;
}

Output

f9c2bb33-f6aa-4b12-b5cc-2d3cc9d76032

Why It Works

When you apply text-align: center; to a parent element, the browser horizontally aligns all inline and inline-block children within that container. This makes it perfect for centering headings, paragraphs, navigation links, or small inline elements, but it won’t work for block-level elements like divs unless their display is changed to inline-block.

So this will NOT work:

.box {
  width: 300px;
  text-align: center; /* does NOT center the box */
}

Real-world use cases

  • Center headings

  • Center button labels

  • Navigation menus

  • Card content alignment

Beginner Mistake

Most people try to center a <div> with text-align: center;. This won’t move the div, only its contents.

Method 2: Center a Block Horizontally

This method centers a block element horizontally using margin: 0 auto;, which is one of the oldest and most reliable CSS techniques. It works by automatically distributing the available horizontal space equally on the left and right sides of the element. When you set the left and right margins to auto, the browser calculates the remaining space in the container and splits it evenly, pushing the element into the center.

Works when:

  • Element has a width

  • Element is block-level

Example, Center a Card

<div class="card">
  I am centered!
</div>
.card {
  width: 300px;
  margin: 0 auto;
  padding: 20px;
  background: #eee;
}

Output

1f1e1df4-7e33-4f54-a9f7-c688c5432782

Why It Works

When you set the elements' margins to auto, the browser calculates the remaining horizontal space in the container after accounting for the element’s width. It then distributes this extra space equally between the left and right margins, which pushes the element into the center. This happens automatically, making margin: 0 auto; a simple and reliable way to horizontally center block elements with a fixed width.

|----auto----|---element---|----auto----|

Browser calculates: left margin = right margin. So the element sits in the middle.

Important Rule

If width is not defined, it won't work:

.card {
  margin: auto; /* won't center , takes full width */
}

Because block elements default to width: 100%;.

Real-world use cases

  • Center website layout container

  • Center forms

  • Center blog content area

Method 3: Perfect Center (Horizontal + Vertical) with Flexbox

This method uses Flexbox to center an element both horizontally and vertically, making it one of the most reliable modern CSS solutions. When you set a container to display: flex;, you activate the Flexbox layout system, which gives you powerful alignment controls. The property justify-content: center; centers the content along the main axis (usually horizontal), while align-items: center; centers it along the cross axis (usually vertical).

Example, Center Login Box

<div class="page">
  <div class="login">
    Login Form
  </div>
</div>

.page {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.login {
  padding: 40px;
  background: white;
  border: 2px solid #333;
}

Output

e7c4abc2-1d23-4933-9b3a-dad52326e924

Why It Works

Flexbox treats the container and its children as a flexible layout system, automatically distributing space along the main and cross axes. This allows any element, regardless of its size, to sit perfectly in the middle of the container, making it ideal for centering modals, hero sections, and other dynamic content.

Property

Controls

justify-content

horizontal

align-items

vertical

This Works Regardless Of:

  • Unknown height

  • Unknown width

  • Responsive layouts

  • Dynamic content

That’s why it’s widely used today.

Real-world use cases

Developers commonly use Flexbox centering to place important interface elements directly in the middle of the screen. For example, it helps center modal dialogs, loading spinners, hero section content, and other full-screen UI components. Hence, they remain visually balanced and easy for users to notice, regardless of screen size.

Method 4: Center Using CSS Grid (The Easiest Method Ever)

CSS Grid offers one of the simplest ways to center elements both horizontally and vertically. By setting a container to display: grid; and applying place-items: center;, you can position any child element perfectly in the middle with just a few lines of code. This method works because Grid provides built-in alignment controls that automatically handle positioning along both axes.

Example

<div class="wrapper">
  <div class="box">Centered!</div>
</div>

.wrapper {
  height: 100vh;
  display: grid;
  place-items: center;
}
.box {
  width: 200px;
  padding: 30px;
  text-align: center;
  background: white;
  border: 2px solid #333;
}

Output

fb959081-1adb-467b-bf7d-754ec2777566

In this example, the .wrapper acts as the grid container, and the .box element becomes a grid item. The property place-items: center; automatically aligns the box in the middle of the container, both horizontally and vertically.

100vh means 100% of the viewport height, which is the full height of the visible browser window. When you set height: 100vh; on a container, it expands to fill the entire screen from top to bottom.

Why It Works

The property place-items: center is actually shorthand for two grid alignment properties:

align-items: center;
justify-items: center;
  • align-items controls vertical alignment inside the grid.

  • justify-items controls horizontal alignment.

By combining both in one line, Grid centers elements in both directions automatically without needing additional layout rules.

When to Prefer Grid Over Flexbox

CSS Grid is ideal when you only need simple centering and don’t require complex layout control. It keeps your code short and easy to read.

Use Grid when:

  • You only need to center a single element

  • You are not building complex layouts

  • You want the simplest and cleanest code

Use Flexbox when:

  • You are aligning multiple items

  • Layout direction matters (row vs column)

  • You need spacing control between elements

Method 5: Center with Absolute Position + Transform

This centers an element using absolute positioning combined with CSS transforms, and it works even when you are not using Flexbox or Grid. In this approach, you position the element with position: absolute; and move it to the middle of its parent using top: 50%; and left: 50%;.

Example, Center Popup

<div class="container">
  <div class="popup">I'm centered</div>
</div>
.container {
  position: relative;
  height: 400px;
}

.popup {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Output

bc20cc8d-090c-45cf-a240-8792c6963784

Why It Works

  1. top: 50% moves the top edge to the middle

  2. left: 50% moves the left edge to the middle

  3. translate(-50%, -50%) shifts the element back by half its size

So the center becomes the element’s midpoint, not the corner.

Explanation

Without transform: The element corner sits at the center, which means this places the top-left corner of the element at the center point.

f579c42a-074f-4bda-8fab-5c8163ff8fac

To fix that, you apply transform: translate(-50%, -50%);, which shifts the element back by half of its own width and height. This adjustment ensures the actual center of the element aligns with the center of the container. Developers often use this technique for overlays, modals, tooltips, and floating UI components.

Real-world use cases

  • Modals

  • Tooltips

  • Floating labels

  • Overlays

Method 6: Vertical Center Single Line Text

This method vertically centers single-line text inside a container by using the line-height property. When you set the line-height to the same value as the container’s height, the browser places the text in the vertical middle of that space because the line box expands to fill the container evenly.

Example, Center Text in Button

<button class="btn">Click Me</button>
.btn {
  height: 60px;
  line-height: 60px;
  text-align: center;
}

Output

be456849-c4b8-49aa-a330-fe448b9a5ee6

Why It Works

This technique works best for elements with a fixed height, such as buttons, badges, or navigation items. However, it only works reliably when the text stays on one line, because multiple lines will break the vertical alignment.

Limitations

The main limitation of using line-height to vertically center text is that it only works for single-line text. If the text wraps onto multiple lines, the line-height no longer matches the container height for each line, causing the vertical centering to break.

This makes the method unsuitable for paragraphs, headings, or any content that can expand beyond one line, so it’s best reserved for buttons, labels, or other fixed-height, single-line elements.

Method 7: The Table-Cell Method (Old but Useful)

This method uses the table-cell technique to center content vertically and horizontally, a reliable approach for older CSS layouts and email templates. By setting a container to display: table; and its child element to display: table-cell; with vertical-align: middle; and text-align: center;, The browser treats the child like a table cell and automatically centers its content.

Example

<div class="outer">
  <div class="inner">Centered</div>
</div>
.outer {
  display: table;
  width: 100%;
  height: 300px;
}

.inner {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

Output

e0960bcf-bd1c-43c0-9d1b-afa48530fd8d

How It Works

  • The .outer container acts as a table.

  • The .inner element behaves like a table cell.

  • Table cells automatically respect vertical alignment rules.

  • Combining vertical-align: middle; and text-align: center; perfectly centers the content both vertically and horizontally.

Why Use This Method

  • It works in older browsers that don’t fully support Flexbox or Grid.

  • It’s especially useful in email templates or legacy layouts.

  • No knowledge of height calculation or transforms is required.

Quick Decision Guide

Situation

Best Method

Center text

text-align

Center block horizontally

margin auto

Center anything modern

flexbox

Simplest full center

grid

Overlay/modal

absolute + transform

Single-line text vertical

line-height

Legacy/email support

table-cell

Common Beginner Problems (And Fixes)

Problem 1: “margin auto not working.”

You forgot the width.

width: 300px;
margin: auto;

Problem 2: “align-items center not working.”

Parent needs height.

height: 100vh;

Problem 3: “absolute centering weird position.”

Parent missing positioning.

parent { position: relative; }

Problem 4: Flexbox vertical centering fails

Check direction:

flex-direction: column;

Now vertical/horizontal axes swap!

Pro Tips You’ll Use Forever

1. Flexbox = alignment tool

2. Grid = placement tool

3. Margin auto = layout tool

Different tools, different jobs.

Remember This Rule

  • If you are centering one thing, use Grid

  • If centering many things, use Flexbox

Summary

CSS centering often feels difficult because beginners expect a single magic property that works in every situation, but no such property exists. Instead, CSS provides multiple layout systems, each designed to solve specific alignment problems.

These include inline alignment for text and inline elements, flow layout for standard block elements, Flexbox for flexible row or column arrangements, Grid for two-dimensional layouts, and positioned layouts for absolute or fixed elements. Once you understand which system applies to your scenario, centering becomes predictable and much easier to implement.

The 7 Methods You Should Memorize

  1. text-align: center

  2. margin: 0 auto

  3. Flexbox centering

  4. Grid place-items: center

  5. Absolute + transform

  6. Line-height trick

  7. Table-cell fallback



Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Audio Notes 2.0. Smarter Summaries, Better Insights, Less Time Wasted

1 Share

We’re all drowning in content. Every week there are new podcast episodes, conference talks, and YouTube videos that feel essential to keeping up.

The problem is not finding good content. The problem is that a 3-hour podcast demands 3 hours of your life before you know whether it was worth it.

I built Audio Notes to solve this.

You paste a YouTube or podcast URL, and it produces an AI-generated summary with key takeaways, action items, and topic tags.

Version 1 did a solid job. Version 2 does it significantly better.

I had neglected the version 1 prototype but have gave it a reboot.  There were some things I wasn’t happy about.  I leveraged Claude Code to extend some of the features -another productivity boost.

In this post I will walk through what has changed in Audio Notes 2.0, why I made these changes, and how the new features help you extract more value from long-form content in less time.

~

What Was Missing in Version 1

The original Audio Notes relied heavily on Azure AI Language for summarisation. It worked, but the summaries were extractive. The system pulled key sentences directly from the transcript rather than synthesising new ones.

For a 30-minute video this was adequate. For a 3-hour podcast, the output often felt thin.

Key takeaways were the biggest gap.

A 3-hour conversation covering half a dozen topics would produce 3 to 5 bullet points. That is not enough to capture the breadth of a long discussion. I was losing information that mattered.

I also had no way to see at a glance how much time a summary was saving me. The numbers were impressive, but they were invisible.

~

What Is New in Audio Notes 2.0

LLM-Powered Summary Generation.  The biggest change is the integration of OpenAI via Semantic Kernel.

Instead of relying solely on extractive summarisation, Audio Notes now sends the full transcript to a large language model with a structured prompt. The model returns:

  • A written summary of the content
  • Key takeaways covering the breadth of topics discussed
  • Action items mentioned in the conversation
  • Topic tags for quick categorisation

 

The difference in quality is immediately noticeable. Summaries read like something a person wrote, not a collection of sentences pulled from a transcript.  The generated summaries are much better,

~

Smarter Key Takeaways That Scale with Content Length

This was a specific frustration. A 15-minute video and a 3-hour podcast were producing roughly the same number of key takeaways. That made no sense.

Audio Notes 2.0 scales the number of requested takeaways based on the transcript length:

  • Short content (under ~20 minutes): 5 takeaways
  • Medium content (up to ~1 hour): 8 takeaways
  • Longer content (up to ~2 hours): 10 takeaways
  • Extended content (3+ hours): 15 takeaways

 

The prompt also instructs the model to cover the breadth of topics discussed, rather than clustering around a single theme.

The result is a set of takeaways that actually represents the full conversation.

~

Time Savings Dashboard

Every summary page now displays three stat cards at the top:

  • Original Duration showing the length of the source content in hours and minutes
  • Reading Time estimating how long it takes to read the summary at an average reading pace
  • Time Saved showing the minutes reclaimed and a percentage with a visual progress bar

 

For a typical 60-minute podcast, the reading time is around 3 to 4 minutes. That is a 90%+ saving displayed right on the page. It is a small addition, but seeing the concrete numbers reinforces that the tool is doing its job.

~

Improved YouTube Processing

Audio extraction from YouTube has been overhauled. The underlying tooling now handles a wider range of video formats and edge cases. The processing pipeline is more reliable, and failures that previously required manual intervention are handled automatically.

~

Topic Badges

Topics extracted from the content are displayed as visual badges on the summary page. This gives you an instant signal about what a piece of content covers before you read any of the summary text.

~

How It Works

The workflow is still three steps and hasn’t changed.

  1. Paste a URL. Drop in any YouTube video or podcast URL from the dashboard.
  2. Generate Summary. Audio Notes extracts the audio, sends it to Azure transcription, then passes the transcript to OpenAI for structured analysis. The entire pipeline runs asynchronously so you can submit a URL and come back to it later.
  3. Review Your Insights. The summary page presents the time savings dashboard, the full summary with markdown formatting, key takeaways, action items, and topic badges. A link back to the original source is included if you decide the content warrants a full listen.

 

I have removed the voice note feature for now.

~

The Technology Behind It

Audio Notes 2.0 is built on .NET with the following services:

  • Azure Speech Services for batch transcription of audio content
  • OpenAI via Semantic Kernel for LLM-powered summary generation, key takeaway extraction, action item identification, and topic classification
  • Azure Blob Storage for persisting transcripts and generated summaries
  • SQL Server with Entity Framework Core for job tracking, user management, and encrypted settings storage

 

The background processing middleware monitors the database for new jobs, submits them to Azure Speech Services, polls for completion, downloads the transcript, extracts the duration, and triggers summary generation.

The web application handles the user interface and job management.

~

A Real Example

I recently processed a 6-hour podcast episode. In version 1, I would have received a handful of takeaways that barely scratched the surface.

With version 2, the summary page showed:

  • Original Duration: 6h 9m
  • Reading Time: 2 min
  • Time Saved: 367 min (99%)

 

The key takeaways section listed many distinct points covering the full range of topics discussed across the episode.

The action items flagged specific tools and frameworks mentioned that were worth investigating further. The topic badges gave me an instant overview before I read a single line.

Total time from paste to insight: under 10 minutes including processing time.

~

What Is Next

I am continuing to refine the summarisation prompts and exploring the integration of Audio Notes with my AI Researcher agent.

The goal is a fully automated pipeline where the researcher agent discovers noteworthy content and Audio Notes summarises it without manual intervention.

I am also looking at supporting batch submission of multiple URLs in a single operation, making it practical to process an entire week of podcast episodes in one go.

~

Wrapping Up

Audio Notes 2.0 is a good step forward from the original. The move to LLM-powered summarisation, the dynamic scaling of key takeaways, and the time savings dashboard make the tool more useful for processing long-form content.

If you are spending hours each week consuming podcasts and YouTube videos, this is the kind of tool that gives you those hours back.

The summaries are better, the insights are deeper, and the time savings are now visible on every page.  You can then decide if you want to make the time investment.

Audio Notes 2.0 is available here.

~

JOIN MY EXCLUSIVE EMAIL LIST
Get the latest content and code from the blog posts!
I respect your privacy. No spam. Ever.
Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

When to Use Prototype Pattern in C#: Decision Guide with Examples

1 Share

When to use Prototype pattern in C#: decision guide with examples, use cases, and scenarios where cloning objects is better than creating new instances.

Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

htmxRazor 1.2.0: Toast Notifications, Pagination, and the End of CSS Specificity Fights

1 Share

The first feature release after htmxRazor hit 1.1 is here, and it targets the three complaints I hear most from .NET developers building server-rendered apps with htmx: “I need toast notifications,” “I need pagination that works with htmx from the start,” and “your CSS keeps fighting with mine.”

Version 1.2.0 addresses all three. Here is what shipped.

Toast Notifications That Actually Work with htmx

Every htmx-powered app needs toast notifications. A user submits a form, the server processes it, and you need to tell them what happened. Until now, your options in the ASP.NET Core world were to wire up a JavaScript toast library by hand or build your own partial-view-plus-htmx-oob-swap plumbing.

htmxRazor 1.2.0 ships a complete toast notification system. Drop a <rhx-toast-container> on your layout, then trigger toasts from the server using the HxToast() or HxToastOob() extension methods. The component handles auto-dismiss timers, severity variants (success, warning, danger, info), stacking when multiple toasts fire at once, and aria-live announcements so screen readers pick up every notification automatically.

No JavaScript. No third-party library. One Tag Helper and a server-side method call.

Pagination Built for htmx

Pagination is another pattern that shows up in nearly every production app, yet nobody had shipped a .NET Tag Helper that wires up htmx navigation correctly. The new <rhx-pagination> component gives you page buttons, ellipsis for large ranges, first/last/prev/next controls, and size variants. All page transitions happen through htmx, so you get partial page updates without full reloads.

If you have been hand-coding pagination partials on every project, this replaces all of that with a single component.

CSS Cascade Layers: No More Specificity Wars

This is the change that will matter most to teams adopting htmxRazor in existing applications.

Every component library ships CSS that eventually collides with your own styles. You write a rule, the library’s rule wins because of higher specificity, and you start sprinkling !important everywhere. It is a familiar and miserable cycle.

Version 1.2.0 wraps all htmxRazor component CSS inside @layer declarations. Cascade layers let the browser resolve specificity in a predictable order: any CSS you write outside a layer will always beat CSS inside one. That means your application styles win by default, with zero specificity hacks needed.

This single change makes htmxRazor significantly easier to adopt in brownfield projects that already have their own stylesheets.

Accessibility: ARIA Live Region Manager

The new <rhx-live-region> component solves a problem that most developers do not realize they have until an accessibility audit flags it. When htmx swaps content on the page, screen readers do not automatically announce the change. Users who rely on assistive technology can miss critical updates entirely.

The live region manager listens for htmx swaps and pushes announcements to screen readers with configurable politeness levels (polite or assertive) and atomic update control. If you care about building applications that work for all of your users, this component closes a real gap.

View Transitions and hx-on:* Support

Two smaller additions round out the release. The new rhx-transition and rhx-transition-name attributes let you wire up the View Transitions API for animated page transitions with no custom JavaScript. And the hx-on:* dictionary attribute on the base Tag Helper class brings full support for htmx 2.x event handler attributes across every component in the library.

Upgrade Now

dotnet add package htmxRazor --version 1.2.0

Browse the full docs and live demos at https://htmxRazor.com, and check the source at https://github.com/cwoodruff/htmxRazor.

htmxRazor is MIT licensed and accepting contributions. If toast notifications, proper pagination, or cascade layers solve a problem you have been working around, give 1.2.0 a try.

The post htmxRazor 1.2.0: Toast Notifications, Pagination, and the End of CSS Specificity Fights first appeared on Chris Woody Woodruff | Fractional Architect.

Read the whole story
alvinashcraft
46 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories