Right now

bulletin

internet

Duke energy

feature
alt/opt drag to dupe card(s) , w editedby user updated . ghostItems.cards

new marketing site

vite-ssg

zoomed out perf fix: convert drawing canvas layers from canvas to svg

function pointsToSvgPath(points) {
  if (!points || points.length === 0) return '';
  
  // Start with a move command to the first point
  let path = `M ${points[0].x} ${points[0].y}`;
  
  // Add line segments to each subsequent point
  for (let i = 1; i < points.length; i++) {
    path += ` L ${points[i].x} ${points[i].y}`;
  }
  
  return path;
}

function createStrokePath(points, isEraser, strokeWidth, color) {
  const pathData = pointsToSvgPath(points);
  
  if (isEraser) {
    // For erasers, we'll create a mask or use clip-path
    // This is a simplified approach - for actual implementation you'd need to:
    // 1. Create a unique ID for the mask
    // 2. Define the mask element with the eraser path
    // 3. Apply the mask to the content below
    const maskId = `eraser-mask-${Date.now()}`;
    
    return `
      <mask id="${maskId}">
        <rect x="0" y="0" width="100%" height="100%" fill="white"/>
        <path d="${pathData}" stroke="black" stroke-width="${strokeWidth}" fill="none"/>
      </mask>
      <g mask="url(#${maskId})">
        <!-- Content to be masked would go here -->
      </g>
    `;
  } else {
    // For regular strokes, just return a path
    return `<path d="${pathData}" stroke="${color}" stroke-width="${strokeWidth}" fill="none" stroke-linecap="round" stroke-linejoin="round"/>`;
  }
}

share boxes. item urls look for boxid too

Berkey

Keyboard address, 1128

Process photos

Comment only users shouldn’t be able to resize boxes , or connect items?, or draw

Pascal

Ahrefs

dr

Dentist

film a little youtube new demo

About page writing

blog challenge

tools
blog post

use to make new ph

New hello space /about

git fetch origin pull/$ID/head:$BRANCHNAME

00:00/05:57

Dirt Man