April 2026 TLDR setup for Ollama + Gemma 4 on a Mac mini (Apple Silicon) — auto-start, preload, and keep-alive
- Mac mini with Apple Silicon (M1/M2/M3/M4/M5)
- At least 16GB unified memory for Gemma 4 (default 8B)
- macOS with Homebrew installed
April 2026 TLDR setup for Ollama + Gemma 4 on a Mac mini (Apple Silicon) — auto-start, preload, and keep-alive
<core_identity> You are an assistant called Cluely, developed and created by Cluely, whose sole purpose is to analyze and solve problems asked by the user or shown on the screen. Your responses must be specific, accurate, and actionable. </core_identity>
<general_guidelines>
| #cloud-config | |
| # Enable automatic package updates and upgrades during cloud-init execution | |
| package_update: true | |
| package_upgrade: true | |
| packages: | |
| # Security and Hardening | |
| - ufw | |
| - fail2ban |
hi, i'm daniel. i'm a 15-year-old with some programming experience and i do a little bug hunting in my free time. here's the insane story of how I found a single bug that affected over half of all Fortune 500 companies:
If you've spent some time online, you’ve probably come across Zendesk.
Zendesk is a customer service tool used by some of the world’s top companies. It’s easy to set up: you link it to your company’s support email (like support@company.com), and Zendesk starts managing incoming emails and creating tickets. You can handle these tickets yourself or have a support team do it for you. Zendesk is a billion-dollar company, trusted by big names like Cloudflare.
Personally, I’ve always found it surprising that these massive companies, worth billions, rely on third-party tools like Zendesk instead of building their own in-house ticketing systems.
| /* File generated automatically, do not edit. */ | |
| import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely'; | |
| export type DBEventType = | |
| 'goal' | | |
| 'own-goal' | | |
| 'penalty-goal' | | |
| 'penalty-miss' | | |
| 'yellow-card' | |
| import { NodeViewProps, NodeViewWrapper } from '@tiptap/react' | |
| import { nodePasteRule, ReactNodeViewRenderer } from '@tiptap/react' | |
| import { mergeAttributes, Node } from '@tiptap/core' | |
| import { Tweet } from 'react-tweet' | |
| export const TweetComponent = ({ node }: NodeViewProps) => { | |
| const url = node.attrs.url | |
| const tweetIdRegex = /\/status\/(\d+)/g | |
| const id = tweetIdRegex.exec(url)?.[1] |
| import axios from 'axios' | |
| import { useOptimisticMutation } from "./useOptimisticMutation.ts" | |
| type Response = boolean | |
| type Error = unknown | |
| type MutationVariables = {itemId: string} | |
| type Items = {id: string; name: string}[] | |
| type Likes = {itemId: string}[] | |
| type History = {type: string}[] |
See the new site: https://postgresisenough.dev
| import { Markdown } from "@/app/components/markdown"; | |
| import { getComments, getPost } from "@/lib/db"; | |
| import { Suspense } from "react"; | |
| export default async function PostPage({ | |
| params, | |
| }: { | |
| params: { postId: string }; | |
| }) { | |
| let post = await getPost(params.postId); |
| const { Prisma } = require("@prisma/client"); | |
| /** | |
| * this plugin is used to automatically exclude fields from prisma queries | |
| * this works with almost all prisma queries that use select and include | |
| * if a custom query is used, it will not work by default, | |
| * but it can by adding a $autoExclude:true to the args | |
| * next to select and include, there is now exclude | |
| * if a field ends with an underscore, it will be excluded unless explicitly in select or include | |
| * truthy field in exclude will be excluded, even if present in select or include |