# custom

Published articles for custom.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Support Time to Take Action with Compose

DevFeed: [Support Time to Take Action with Compose](<https://devfeed.tech/articles/support-time-to-take-action-with-compose-38496.md>)

Original publisher: [Read original article](<https://eevis.codes/blog/2024-12-28/support-time-to-take-action-with-compose/>)

Author: Eevis Panula

Published: 2024-12-28T09:46:59.418000Z

Content type: tutorial

Language: en

Sources: [Eevis Blog](<https://devfeed.tech/sources/eevis-blog.md>)

Topics: [Accessibility](<https://devfeed.tech/topics/accessibility.md>), [Android](<https://devfeed.tech/topics/android.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [User interface design](<https://devfeed.tech/topics/ui-design.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [android](<https://devfeed.tech/tags/android.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [components](<https://devfeed.tech/tags/components.md>), [compose](<https://devfeed.tech/tags/compose.md>), [custom](<https://devfeed.tech/tags/custom.md>), [developers](<https://devfeed.tech/tags/developers.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [settings](<https://devfeed.tech/tags/settings.md>), [users](<https://devfeed.tech/tags/users.md>)

### AI overview

This tutorial explains Android's Time to take action accessibility setting, which controls how long temporary messages remain visible. It describes why users may need additional time and shows why custom Compose components must explicitly support the setting.

### Source excerpt

While working on my master's thesis and the Android Accessibility Checklist, one of the answers to my survey mentioned an accessibility setting called time to take action. Since then, I've been curious about it and wanted to write a blog post as I feel it's one of the undersupported accessibility settings and really useful for those who utilize it. So, what is time to take action, and why would someone use it? And why should we, as developers, care? Let's talk about that first. Time to Take Action Time to take action is a setting that controls the minimum time in which temporary messages asking a user to take action are shown. So, for example, when you press the volume buttons on your Android phone, you should see the volume controls next to the volume buttons, and this setting controls how long they're visible. This setting has different options: Default, 10 seconds, 30 seconds, 1 minute and 2 minutes. You can find them from Settings -> Accessibility Settings -> Timing controls -> Time to take action (Accessibility timeout). The screen looks something like this, depending on your phone's version and manufacturer: And why would someone need this setting? Well, the source code and documentation for a method we're going to use in a moment puts it pretty well: Some users may need extra time to review the controls, or to reach them, or to activate assistive technology to activate the controls automatically. Okay, now we've established what the time to take action is. However, the question of relevance remains: Why should we care as developers? Isn't it something that the operating system handles automatically? The answer is yes and no. Most components on the operating system level and Material3 components respect this setting. However, when you're building a custom component, it's not automatically respected, and you'll need to add support for it. That's why the settings page mentions that not all apps support the setting. The thing is, developers usually don't know abo

## Function Types in Nix

DevFeed: [Function Types in Nix](<https://devfeed.tech/articles/function-types-in-nix-32422.md>)

Original publisher: [Read original article](<https://garnix.io/blog/typed-function-types>)

Published: 2024-08-27T00:00:00Z

Content type: article

Language: en

Sources: [Garnix Blog](<https://devfeed.tech/sources/garnix-blog.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [function](<https://devfeed.tech/topics/function.md>)

Tags: [custom](<https://devfeed.tech/tags/custom.md>), [function](<https://devfeed.tech/tags/function.md>), [functions](<https://devfeed.tech/tags/functions.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

A short note about custom typing for functions in Nix.

### Source excerpt

A short note about custom typing for functions in Nix

## Launch Week II Day 4: Custom JS

DevFeed: [Launch Week II Day 4: Custom JS](<https://devfeed.tech/articles/launch-week-ii-day-4-custom-js-31050.md>)

Original publisher: [Read original article](<https://www.mintlify.com/blog/launch-week-2-day-4>)

Author: Joshua Kim

Published: 2024-01-10T00:00:00Z

Content type: release

Language: en

Sources: [Mintlify Blog](<https://devfeed.tech/sources/mintlify-blog.md>)

Topics: [Documentation](<https://devfeed.tech/topics/documentation.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [announcements](<https://devfeed.tech/tags/announcements.md>), [custom](<https://devfeed.tech/tags/custom.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [integrations](<https://devfeed.tech/tags/integrations.md>), [js](<https://devfeed.tech/tags/js.md>), [launch](<https://devfeed.tech/tags/launch.md>), [launch-week](<https://devfeed.tech/tags/launch-week.md>), [tracking](<https://devfeed.tech/tags/tracking.md>)

### AI overview

Mintlify introduced Custom JS for Growth plan customers during Launch Week II Day 4. The feature enables custom integrations, analytics, user tracking, and advanced documentation customizations such as platform-specific tab auto-selection.

### Source excerpt

Day 4 of Launch Week 2 brings Custom JS to your documentation 🚀.

## Announcing Custom Domains on Fermyon Cloud

DevFeed: [Announcing Custom Domains on Fermyon Cloud](<https://devfeed.tech/articles/announcing-custom-domains-on-fermyon-cloud-15158.md>)

Original publisher: [Read original article](<https://www.fermyon.com/blog/announcing-custom-domains>)

Author: MacKenzie Olson

Published: 2023-07-26T16:00:00Z

Content type: release

Language: en

Sources: [Fermyon - Experience the next wave of cloud computing.](<https://devfeed.tech/sources/fermyon-experience-the-next-wave-of-cloud-computing.md>)

Topics: [Cloud](<https://devfeed.tech/topics/cloud.md>), [domain](<https://devfeed.tech/topics/domain.md>)

Tags: [announce](<https://devfeed.tech/tags/announce.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [custom](<https://devfeed.tech/tags/custom.md>), [domain](<https://devfeed.tech/tags/domain.md>)

### AI overview

Fermyon Cloud now supports custom domains, allowing users to bring their own domain while Fermyon manages the rest.

### Source excerpt

Today, we are excited to announce support for custom domains on Fermyon Cloud - bring your domain, and we'll handle the rest.

## Indexing by Custom Field in Craft CMS

DevFeed: [Indexing by Custom Field in Craft CMS](<https://devfeed.tech/articles/indexing-by-custom-field-in-craft-cms-31273.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/indexing-by-custom-field-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2023-06-28T17:13:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Database](<https://devfeed.tech/topics/database.md>), [migration](<https://devfeed.tech/topics/migration.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [custom-fields](<https://devfeed.tech/tags/custom-fields.md>), [database](<https://devfeed.tech/tags/database.md>), [fields](<https://devfeed.tech/tags/fields.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [indexes](<https://devfeed.tech/tags/indexes.md>), [indexing](<https://devfeed.tech/tags/indexing.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [make](<https://devfeed.tech/tags/make.md>), [migration](<https://devfeed.tech/tags/migration.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

A tutorial on adding database indexes for custom fields in Craft CMS through a content migration. It explains that Craft CMS does not automatically index custom fields, so queries filtering on those fields may not scale well as datasets grow.

### Source excerpt

Learn how to make a content migration to add database indexes for custom fields in Craft CMS

## Logging to a File with Craft CMS 4

DevFeed: [Logging to a File with Craft CMS 4](<https://devfeed.tech/articles/logging-to-a-file-with-craft-cms-4-31279.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/logging-to-a-file-with-craft-cms-4>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2022-12-21T19:35:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Logging](<https://devfeed.tech/topics/logging.md>), [log management](<https://devfeed.tech/topics/log-management.md>), [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [easily](<https://devfeed.tech/tags/easily.md>), [file](<https://devfeed.tech/tags/file.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [logging](<https://devfeed.tech/tags/logging.md>), [logs](<https://devfeed.tech/tags/logs.md>), [module](<https://devfeed.tech/tags/module.md>), [php](<https://devfeed.tech/tags/php.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [send](<https://devfeed.tech/tags/send.md>), [separate](<https://devfeed.tech/tags/separate.md>)

### AI overview

A tutorial showing how to configure Craft CMS 4 plugins or modules to send their logs to separate files using Monolog and a FileLog helper class. It explains log levels, category matching, namespaces, and storage/logs output.

### Source excerpt

Learn how to easily send logs from your custom module or plugin to a separate file in Craft CMS 4

## Bottom sheet: Custom transitioning

DevFeed: [Bottom sheet: Custom transitioning](<https://devfeed.tech/articles/bottom-sheet-custom-transitioning-38013.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/697962/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-11-17T14:46:51Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottom-sheet-behavior](<https://devfeed.tech/tags/bottom-sheet-behavior.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [custom](<https://devfeed.tech/tags/custom.md>), [ios](<https://devfeed.tech/tags/ios.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

This tutorial explains how to implement a custom transitioning delegate in an iOS application to present controllers as bottom sheets. It covers presentation and animation controllers, content-sized layout, and the example payment screen in the "Кошелёк" app.

### Source excerpt

Современные требования к дизайну мобильных приложений всё чаще подкидывают задачи по отображению контента со сложным поведением. Для его реализации необходимо понимание того, как работают кастомные презентация и транзишены. В этой статье я расскажу, как мы решили задачу по созданию экрана оплаты в приложении "Кошелёк" с помощью кастомной навигации между контроллерами, которые отображаются как bottom sheet. Читать далее

## Introducing Bartholomew

DevFeed: [Introducing Bartholomew](<https://devfeed.tech/articles/introducing-bartholomew-15263.md>)

Original publisher: [Read original article](<https://www.fermyon.com/blog/introducing-bartholomew>)

Published: 2022-02-15T19:12:25Z

Content type: release

Language: en

Sources: [Fermyon - Experience the next wave of cloud computing.](<https://devfeed.tech/sources/fermyon-experience-the-next-wave-of-cloud-computing.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [wasm](<https://devfeed.tech/topics/wasm.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [Handlebars](<https://devfeed.tech/topics/handlebars.md>), [Markdown](<https://devfeed.tech/topics/markdown.md>)

Tags: [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [custom](<https://devfeed.tech/tags/custom.md>), [functions](<https://devfeed.tech/tags/functions.md>), [lightweight](<https://devfeed.tech/tags/lightweight.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [templates](<https://devfeed.tech/tags/templates.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

Fermyon introduces Bartholomew, a lightweight WebAssembly content management system with Handlebars templates, custom scripted functions, and Markdown support.

### Source excerpt

Fermyon is proud to introduce our new lightweight WebAssembly (Wasm) content management system (CMS) that we call Bartholomew. With support for handlebars templates, custom scripted functions, and markdown, it's a svelte way to run a CMS.

## Designing Harmony into Dynamic Color

DevFeed: [Designing Harmony into Dynamic Color](<https://devfeed.tech/articles/designing-harmony-into-dynamic-color-29254.md>)

Original publisher: [Read original article](<https://material.io/blog/dynamic-color-harmony>)

Published: 2022-02-10T13:00:00Z

Content type: article

Language: en

Sources: [Material.io - Material Design](<https://devfeed.tech/sources/material-io-material-design.md>)

Topics: [color](<https://devfeed.tech/topics/color.md>)

Tags: [color](<https://devfeed.tech/tags/color.md>), [custom](<https://devfeed.tech/tags/custom.md>), [design](<https://devfeed.tech/tags/design.md>), [user](<https://devfeed.tech/tags/user.md>)

### AI overview

Material explains how makers can design with custom colors while respecting user choice in dynamic color systems.

### Source excerpt

How Material enables makers to design with custom colors while respecting user choice

## Searching Craft CMS Matrix Blocks

DevFeed: [Searching Craft CMS Matrix Blocks](<https://devfeed.tech/articles/searching-craft-cms-matrix-blocks-31293.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/searching-craft-cms-matrix-blocks>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-11-26T05:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Query (disambiguation)](<https://devfeed.tech/topics/query.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>)

Tags: [based](<https://devfeed.tech/tags/based.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [blocks](<https://devfeed.tech/tags/blocks.md>), [cms](<https://devfeed.tech/tags/cms.md>), [contain](<https://devfeed.tech/tags/contain.md>), [contents](<https://devfeed.tech/tags/contents.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [easily](<https://devfeed.tech/tags/easily.md>), [elements](<https://devfeed.tech/tags/elements.md>), [entries](<https://devfeed.tech/tags/entries.md>), [insights](<https://devfeed.tech/tags/insights.md>), [little](<https://devfeed.tech/tags/little.md>), [matrix](<https://devfeed.tech/tags/matrix.md>), [php](<https://devfeed.tech/tags/php.md>), [query](<https://devfeed.tech/tags/query.md>), [twig](<https://devfeed.tech/tags/twig.md>)

### AI overview

A tutorial on querying Craft CMS Entries by the content of their Matrix blocks. It explains how to find matching Matrix blocks, collect their owner IDs, and use those IDs to filter an Element query, including a generalized approach usable in Twig.

### Source excerpt

With a little custom Behavior, we can easily query for Elements such as Entries in Craft CMS based on the contents of the Matrix Blocks they contain

## A HashiConf art collab

DevFeed: [A HashiConf art collab](<https://devfeed.tech/articles/a-hashiconf-art-collab-35522.md>)

Original publisher: [Read original article](<https://meowni.ca/posts/hashicollab/>)

Author: Monica Dinculescu

Published: 2021-10-15T00:00:00Z

Content type: opinion

Language: en

Sources: [Monica Dinculescu](<https://devfeed.tech/sources/monica-dinculescu.md>)

Topics: [color](<https://devfeed.tech/topics/color.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [iteration](<https://devfeed.tech/topics/iteration.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [conference](<https://devfeed.tech/tags/conference.md>), [custom](<https://devfeed.tech/tags/custom.md>), [design](<https://devfeed.tech/tags/design.md>), [generative](<https://devfeed.tech/tags/generative.md>), [hashicorp](<https://devfeed.tech/tags/hashicorp.md>), [iteration](<https://devfeed.tech/tags/iteration.md>), [printer](<https://devfeed.tech/tags/printer.md>), [printing](<https://devfeed.tech/tags/printing.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [things](<https://devfeed.tech/tags/things.md>)

### AI overview

The article describes creating custom generative-art prints for HashiConf Europe speakers. Each print combines the speaker's name, talk title, and the relevant HashiCorp product color in a randomly generated geometric grid, following conference design guidelines.

### Source excerpt

A couple of months ago my friend Jana helped organize HashiConf Europe, and asked me to work on generating custom artwork for each of their speakers. This was my first experience with creating art for someone else, and especially art that had to match someone else's artistic guidelines. I've said this before, but I live and nap by the idea that rules (and editing) are at the core of the artistic process and not having to do that myself was brilliant. I wanted to write a bit about it because a) I did a bunch of work that I'm really proud of and I never got to talk about it and b) I am vain and I want to talk about it. This was the final poster: And this is what we wrote about it on the card that accompanied it: Enclosed you will find an art print made for you by generative artist and engineer Monica Dinculescu. This individual print is unique to you and you alone, as Monica has incorporated your name, the title of your talk, and the color of the HashiCorp product that you are talking about at this year's conference. Each cell in the grid has been randomly generated to contain either a letter from your name, or a pattern in the product color. Cells located towards the middle of the grid are more likely to contain a letter rather than a pattern, and this likelihood decreases in the cells towards the edges. This print is the only iteration of its kind. Were it to be generated again, it would look slightly different each time. I print everything in my art store myself, because I sell very limited editions and third-party printing companies only make sense financially when you're printing in the several dozen. This does mean that sometimes I'll fight with my printer thinking that its colour profile is whack, only to discover that it was Doing Just Fine™ and my MacBook oversaturates things like it's an Instagram filter in 2011. Every day is a school day. Here are all the prints drying on their totes profesh drying rack that is definitely not just a string I hung around in

## Random Animating Pie Button

DevFeed: [Random Animating Pie Button](<https://devfeed.tech/articles/random-animating-pie-button-32075.md>)

Original publisher: [Read original article](<https://www.maiatoday.net/p/random-animating-pie-button/>)

Published: 2021-06-16T21:36:11Z

Content type: tutorial

Language: en

Sources: [maiatoday](<https://devfeed.tech/sources/maiatoday.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [animate](<https://devfeed.tech/tags/animate.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [code](<https://devfeed.tech/tags/code.md>), [color](<https://devfeed.tech/tags/color.md>), [component](<https://devfeed.tech/tags/component.md>), [compose](<https://devfeed.tech/tags/compose.md>), [custom](<https://devfeed.tech/tags/custom.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [exploring](<https://devfeed.tech/tags/exploring.md>), [fun](<https://devfeed.tech/tags/fun.md>), [functions](<https://devfeed.tech/tags/functions.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [random](<https://devfeed.tech/tags/random.md>), [val](<https://devfeed.tech/tags/val.md>), [var](<https://devfeed.tech/tags/var.md>)

### AI overview

A Jetpack Compose sample demonstrates a custom pie-chart component that draws with Canvas and animates to a random percentage when a button is clicked.

### Source excerpt

I am exploring animations with small sampler functions using Jetpack Compose. This one is a custom component that draws a little pie chart. It will animate a random pie value on the click of the button. data class PieData( val foreground: Color = Color.White, val strokeWidth: Dp = 4.dp, val percentage: Float ) @Composable fun PieStatus( modifier: Modifier = Modifier, pieData: PieData ) { var animationPlayed by remember { mutableStateOf(false) } val currentPercentage = animateFloatAsState( targetValue = if (animationPlayed) pieData.percentage else 0f, animationSpec = tween(1000) ) LaunchedEffect(key1 = true) { animationPlayed = true } Canvas( modifier = modifier ) { val canvasWidth = size.width val canvasHeight = size.height drawCircle( color = pieData.foreground, center = Offset(x = canvasWidth / 2, y = canvasHeight / 2), radius = canvasWidth / 2 - pieData.strokeWidth.toPx(), style = Stroke(width = pieData.strokeWidth.toPx()) ) val arcPadding = pieData.strokeWidth.toPx() * 2 drawArc( color = pieData.foreground, startAngle = -90f, sweepAngle = currentPercentage.value * 360, useCenter = true, topLeft = Offset(arcPadding, arcPadding), size = Size(size.width - (arcPadding * 2f), size.height - (arcPadding * 2f)) ) } } code

## Custom Matrix Block Peer Validation Rules

DevFeed: [Custom Matrix Block Peer Validation Rules](<https://devfeed.tech/articles/custom-matrix-block-peer-validation-rules-31255.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/custom-matrix-block-validation-rules>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-05-24T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [authoring](<https://devfeed.tech/tags/authoring.md>), [better](<https://devfeed.tech/tags/better.md>), [blocks](<https://devfeed.tech/tags/blocks.md>), [builder](<https://devfeed.tech/tags/builder.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [errors](<https://devfeed.tech/tags/errors.md>), [experience](<https://devfeed.tech/tags/experience.md>), [insights](<https://devfeed.tech/tags/insights.md>), [leverage](<https://devfeed.tech/tags/leverage.md>), [matrix](<https://devfeed.tech/tags/matrix.md>), [module](<https://devfeed.tech/tags/module.md>), [peer](<https://devfeed.tech/tags/peer.md>), [rules](<https://devfeed.tech/tags/rules.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

A tutorial on extending Craft CMS Matrix block content builders with custom peer validation rules. The example validates sundae blocks by limiting scoop and topping counts, requiring at least one scoop, and rejecting a specific flavor combination.

### Source excerpt

Leverage a Craft CMS module to add custom peer validation rules to your content builder Matrix blocks for a better content authoring experience

## Creating a custom field in Craft CMS

DevFeed: [Creating a custom field in Craft CMS](<https://devfeed.tech/articles/creating-a-custom-field-in-craft-cms-31251.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/creating-a-custom-field-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-08-27T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [craft](<https://devfeed.tech/tags/craft.md>), [create](<https://devfeed.tech/tags/create.md>), [custom](<https://devfeed.tech/tags/custom.md>), [field](<https://devfeed.tech/tags/field.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [leveraging](<https://devfeed.tech/tags/leveraging.md>), [little](<https://devfeed.tech/tags/little.md>), [platform](<https://devfeed.tech/tags/platform.md>), [possible](<https://devfeed.tech/tags/possible.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

A tutorial on creating a custom field in Craft CMS whose dropdown options come from Craft Commerce country data. It recommends subclassing the built-in Craft Dropdown field and changing only the required behavior to reduce code and maintenance.

### Source excerpt

Learn how to create a custom field in Craft CMS, writing as little code as possible by leveraging the platform.

## Randomized Selective Color: A Post List Study

DevFeed: [Randomized Selective Color: A Post List Study](<https://devfeed.tech/articles/randomized-selective-color-a-post-list-study-28831.md>)

Original publisher: [Read original article](<https://una.im/random-selective-colors/>)

Published: 2020-04-27T00:00:00Z

Content type: article

Language: en

Sources: [Una Kravets](<https://devfeed.tech/sources/una-kravets.md>)

Topics: [color](<https://devfeed.tech/topics/color.md>), [CSS](<https://devfeed.tech/topics/css.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [Code](<https://devfeed.tech/topics/code.md>), [interactive website](<https://devfeed.tech/topics/interactive-website.md>), [Vanilla JavaScript](<https://devfeed.tech/topics/vanilla-js.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [color](<https://devfeed.tech/tags/color.md>), [css](<https://devfeed.tech/tags/css.md>), [custom](<https://devfeed.tech/tags/custom.md>), [design](<https://devfeed.tech/tags/design.md>), [flexbox](<https://devfeed.tech/tags/flexbox.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [properties](<https://devfeed.tech/tags/properties.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

A study of selective color from a predefined palette for a website redesign. It demonstrates randomized color combinations using CSS custom properties, JavaScript, gradients, flexbox, and progressive enhancement with CSS Houdini.

### Source excerpt

A study on selective color from a predefined list, using CSS custom properties, a little bit of JavaScript, and some progressively enhanced CSS Houdini.

## Post-Mortem: Outbreak Database

DevFeed: [Post-Mortem: Outbreak Database](<https://devfeed.tech/articles/post-mortem-outbreak-database-31288.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/post-mortem-outbreak-database>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-03-03T05:00:00Z

Content type: article

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Vue.js](<https://devfeed.tech/topics/vue.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [axios](<https://devfeed.tech/topics/axios.md>), [Website](<https://devfeed.tech/topics/website.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [aging](<https://devfeed.tech/tags/aging.md>), [axios](<https://devfeed.tech/tags/axios.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [hybrid](<https://devfeed.tech/tags/hybrid.md>), [management](<https://devfeed.tech/tags/management.md>), [migration](<https://devfeed.tech/tags/migration.md>), [modernizing](<https://devfeed.tech/tags/modernizing.md>), [php](<https://devfeed.tech/tags/php.md>), [post-mortem](<https://devfeed.tech/tags/post-mortem.md>), [post-mortems](<https://devfeed.tech/tags/post-mortems.md>), [twig-vue-js](<https://devfeed.tech/tags/twig-vue-js.md>), [vue](<https://devfeed.tech/tags/vue.md>), [vuex](<https://devfeed.tech/tags/vuex.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

A post-mortem on modernizing the aging custom PHP Outbreak Database website by migrating it to Craft CMS and planning a hybrid Twig/Vue.js frontend using Vuex, Axios, and GraphQL. The project aimed to improve content maintenance, researcher and journalist usability, and long-term technical foundations.

### Source excerpt

Modernizing an aging custom PHP website with Craft CMS for content management, and a hybrid Twig/Vue.js + Vuex + Axios + GraphQL on the frontend

## Creating a Custom Logger for Craft CMS

DevFeed: [Creating a Custom Logger for Craft CMS](<https://devfeed.tech/articles/creating-a-custom-logger-for-craft-cms-31252.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/creating-a-custom-logger-for-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2019-07-21T17:52:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Logging](<https://devfeed.tech/topics/logging.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Software as a service](<https://devfeed.tech/topics/saas.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [built-in](<https://devfeed.tech/tags/built-in.md>), [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [insights](<https://devfeed.tech/tags/insights.md>), [logger](<https://devfeed.tech/tags/logger.md>), [logging](<https://devfeed.tech/tags/logging.md>), [logs](<https://devfeed.tech/tags/logs.md>), [need](<https://devfeed.tech/tags/need.md>), [needs](<https://devfeed.tech/tags/needs.md>), [saas](<https://devfeed.tech/tags/saas.md>), [send](<https://devfeed.tech/tags/send.md>), [service](<https://devfeed.tech/tags/service.md>), [sufficient](<https://devfeed.tech/tags/sufficient.md>), [third-party](<https://devfeed.tech/tags/third-party.md>), [want](<https://devfeed.tech/tags/want.md>)

### AI overview

A tutorial on customizing Craft CMS logging through Yii-based configuration and code, including changing built-in behavior and sending logs to third-party aggregation services such as PaperTrail or Sentry.

### Source excerpt

The built-in Craft CMS logging system is sufficient for most needs, but what if you need custom logging, or want to send your logs to a third-party service?

## Eschewing Shadow DOM

DevFeed: [Eschewing Shadow DOM](<https://devfeed.tech/articles/eschewing-shadow-dom-31224.md>)

Original publisher: [Read original article](<https://every-layout.dev/blog/eschewing-shadow-dom/>)

Author: Heydon Pickering

Published: 2019-06-14T00:00:00Z

Content type: article

Language: en

Sources: [The Every Layout Blog](<https://devfeed.tech/sources/the-every-layout-blog.md>)

Topics: [Web Components](<https://devfeed.tech/topics/web-components.md>), [CSS](<https://devfeed.tech/topics/css.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [React](<https://devfeed.tech/topics/react.md>), [styled-components](<https://devfeed.tech/topics/styled-components.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [custom](<https://devfeed.tech/tags/custom.md>), [element](<https://devfeed.tech/tags/element.md>), [react](<https://devfeed.tech/tags/react.md>), [styled-components](<https://devfeed.tech/tags/styled-components.md>)

### AI overview

An examination of styling problems encountered with Shadow DOM, including inconsistent universal styles, limited inheritance, slot restrictions, and specificity issues. The author proposes an experimental alternative for web components that namespaces and embeds prop-derived instance styles in the document head.

### Source excerpt

Regarding styling, Shadow DOM is really good at one thing: preventing per-component styles from leaking out and affecting other parts of the document. Unfortunately, Shadow DOM also has a very opinionated way of preventing styles being applied from the parent document. Here is a roundup of the quirks and associated issues I've encountered: Shadow DOM styling issues Universal styles Some universal styles (using the * selector) are applied, and others are not. The color property appears to pierce shadow boundaries, but I've had no luck with box-sizing. Having to set box-sizing: border-box for each component is redundant. Inheritance Document styles are inherited in Shadow DOM. But inheritance only gets you so far, especially since not all properties are inheritable by default anyway. I've tried hacking things together with the explicit inherit keyword, but that seems to have no effect. Using the following is no good, because it forces every node to inherit every property from the parent. If <my-component> had display: flex applied, every one of the component's descendants would adopt it. * { all: inherit; /* yikes */ } Slot restrictions For performance reasons, the ::slotted() selector, which allows you to style the Light DOM content of your component from within your Shadow DOM, only lets you affect child elements and not descendants at depth. This is a bit restrictive. Worse, you cannot seem to use sibling combinators like + or ~. None of the following works: ::slotted(*) + * /* Nope */ ::slotted(* + *) /* Nope */ ::slotted(*) + ::slotted(*) /* Nope */ Specificity In making layout components, I like to take a progressive approach: style the component and its Light DOM nodes in my document stylesheet, then enhance with instance-specific styles via props (attributes) in Shadow DOM. For a component instance that looks like this... <my-component itemWidth="10rem"></my-component> ...I would apply the itemWidth value in the Shadow DOM using interpolation: ` <style> ::slot

## CSS only elastic hover effect

DevFeed: [CSS only elastic hover effect](<https://devfeed.tech/articles/css-only-elastic-hover-effect-37266.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/elastic-hover-effect/>)

Author: Stanko

Published: 2018-03-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [how to create smooth CSS transitions](<https://devfeed.tech/topics/how-to-create-smooth-css-transitions.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [custom](<https://devfeed.tech/tags/custom.md>), [effect](<https://devfeed.tech/tags/effect.md>)

### AI overview

A tutorial explaining how to create an elastic hover effect for buttons using CSS. It uses ellipse pseudo-elements that scale on hover, slight button zooming, and custom elastic Bézier easing; a wireframe version is also included.

### Source excerpt

Some CSS fun. Lately I've stumbled upon couple of websites with elastic hover effect on buttons. Each one was using SVG morphing, which is fine, but I was wondering how hard would it be to implement it in CSS. It ended up up being pretty easy. I created four pseudo elementsOnly two pseudo elements (::before and ::after) can be created per element, therefore each button has one additional div inside it.. Each of these is ellipse, running along one edge of the button. By default these are scaled to zero by relevant axis. On hover, they scale back to their full size. For effect, whole button zoom in a little bit. Combine all of that with custom elastic bezier easing, and it looks quite convincing. Wireframe version is included as well, to make it easier to see how it works.

## How to Add a Text Filter to Django Admin

DevFeed: [How to Add a Text Filter to Django Admin](<https://devfeed.tech/articles/how-to-add-a-text-filter-to-django-admin-33906.md>)

Original publisher: [Read original article](<https://hakibenita.com/how-to-add-a-text-filter-to-django-admin>)

Author: Haki Benita

Published: 2018-01-01T22:00:00Z

Content type: tutorial

Language: en

Sources: [Haki Benita](<https://devfeed.tech/sources/haki-benita.md>)

Topics: [Django](<https://devfeed.tech/topics/django.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [custom](<https://devfeed.tech/tags/custom.md>), [django](<https://devfeed.tech/tags/django.md>), [django-admin](<https://devfeed.tech/tags/django-admin.md>), [faster](<https://devfeed.tech/tags/faster.md>), [filter](<https://devfeed.tech/tags/filter.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [search](<https://devfeed.tech/tags/search.md>), [text](<https://devfeed.tech/tags/text.md>)

### AI overview

This tutorial explains how to replace broad Django Admin search fields with custom text-based ListFilters for specific fields. The approach avoids large match-any queries and can make admin searches faster.

### Source excerpt

Django Admin search fields are great, throw a bunch of fields in search_fields and Django will handle the rest. The problem with search field begins when there are too many of them. This is how we replaced Django search with text filters for specific fields, and made Django admin much faster.

## Enhancing a Craft CMS 3 Website with a Custom Module

DevFeed: [Enhancing a Craft CMS 3 Website with a Custom Module](<https://devfeed.tech/articles/enhancing-a-craft-cms-3-website-with-a-custom-module-31259.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/enhancing-a-craft-cms-3-website-with-a-custom-module>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2017-12-30T21:42:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Website](<https://devfeed.tech/topics/website.md>), [Code](<https://devfeed.tech/topics/code.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [client-s](<https://devfeed.tech/tags/client-s.md>), [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [enhancing](<https://devfeed.tech/tags/enhancing.md>), [functionality](<https://devfeed.tech/tags/functionality.md>), [insights](<https://devfeed.tech/tags/insights.md>), [lets](<https://devfeed.tech/tags/lets.md>), [module](<https://devfeed.tech/tags/module.md>), [php](<https://devfeed.tech/tags/php.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [resorting](<https://devfeed.tech/tags/resorting.md>), [using](<https://devfeed.tech/tags/using.md>), [website](<https://devfeed.tech/tags/website.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

This tutorial explains how to use a custom Module in Craft CMS 3 to add website-specific functionality without creating or using a plugin. It compares Modules and Plugins, describes their relationship, and explains that Modules can be used to load custom CSS or JavaScript in the Craft AdminCP.

### Source excerpt

Enhancing your client's Craft CMS 3 website with a Module lets you add custom functionality without resorting to using or writing a plugin

## Custom Errors in TypeScript 2.1

DevFeed: [Custom Errors in TypeScript 2.1](<https://devfeed.tech/articles/custom-errors-in-typescript-2-1-31839.md>)

Original publisher: [Read original article](<https://www.metachris.dev/2017/01/custom-errors-in-typescript-2.1/>)

Author: Chris Hager

Published: 2017-01-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Chris Hager](<https://devfeed.tech/sources/chris-hager.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>)

Tags: [class](<https://devfeed.tech/tags/class.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [custom](<https://devfeed.tech/tags/custom.md>), [errors](<https://devfeed.tech/tags/errors.md>), [native](<https://devfeed.tech/tags/native.md>), [prototype](<https://devfeed.tech/tags/prototype.md>), [subclass](<https://devfeed.tech/tags/subclass.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

A tutorial on handling custom Error subclasses in TypeScript 2.1, where extending built-in types such as Error may leave subclass methods undefined and cause instanceof checks to fail. It presents a solution that reliably works, including with native and Bluebird promises.

### Source excerpt

TypeScript 2.1 introduced a number of breaking changes, among them that "Extending built-ins like Error, Array, and Map may no longer work". For a subclass like the following: class FooError extends Error { constructor(m: string) { super(m); } sayHello() { return "hello " + this.message; } } methods may be undefined on objects returned by constructing these subclasses, so calling sayHello will result in an error. instanceof will be broken between instances of the subclass and their instances, so (new FooError()) instanceof FooError will return false.

## Custom Jekyll pagination

DevFeed: [Custom Jekyll pagination](<https://devfeed.tech/articles/custom-jekyll-pagination-37260.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/custom-jekyll-pagination/>)

Author: Stanko

Published: 2016-02-22T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [Jekyll](<https://devfeed.tech/topics/jekyll.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [custom](<https://devfeed.tech/tags/custom.md>), [gist](<https://devfeed.tech/tags/gist.md>), [jekyll](<https://devfeed.tech/tags/jekyll.md>), [pagination](<https://devfeed.tech/tags/pagination.md>)

### AI overview

This tutorial describes customizing Jekyll pagination to show at least five page links with the current page centered, plus first and last page links on larger screens while retaining Newer and Older links. It points readers to the implementation code and a screenshot.

### Source excerpt

Please note that I'm not using Jekyll anymore, so this post might be outdated. Jekyll comes with simple pagination which has only Newer and Older links. I wanted a little bit more, now pagination shows at least five pages, with current in the middle. On the larger screens there are also first and last page links. Newer and Older links are, of course, still there. Check the gist with the code. You can see it at the bottom of this website, or just check the screenshot below:

## Running a Custom Kernel on Fedora

DevFeed: [Running a Custom Kernel on Fedora](<https://devfeed.tech/articles/running-a-custom-kernel-on-fedora-40666.md>)

Original publisher: [Read original article](<https://radek.io/posts/custom-kernel-on-fedora/>)

Published: 2012-02-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Radek Pazdera](<https://devfeed.tech/sources/radek-pazdera.md>)

Topics: [Fedora](<https://devfeed.tech/topics/fedora.md>), [Linux Kernel](<https://devfeed.tech/topics/linux-kernel.md>), [Kernel](<https://devfeed.tech/topics/kernel.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Git](<https://devfeed.tech/topics/git.md>), [make](<https://devfeed.tech/topics/make.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [custom](<https://devfeed.tech/tags/custom.md>), [fedora](<https://devfeed.tech/tags/fedora.md>), [git](<https://devfeed.tech/tags/git.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [install](<https://devfeed.tech/tags/install.md>), [installation](<https://devfeed.tech/tags/installation.md>), [kernel](<https://devfeed.tech/tags/kernel.md>), [make](<https://devfeed.tech/tags/make.md>), [modules](<https://devfeed.tech/tags/modules.md>)

### AI overview

A step-by-step guide to downloading, patching, configuring, building, and installing a custom Linux kernel on Fedora, using the mainline kernel tree for i686. It also cautions readers to keep a fail-safe kernel available in case the installation fails.

### Source excerpt

Build and install your own kernel on Fedora

[Next page](<https://devfeed.tech/tags/custom.md?cursor=WyIyMDEyLTAyLTEyVDAwOjAwOjAwKzAwOjAwIiwgImVhOGJhZTM5LWZiZjYtNDU5OS1iMDkzLTNlNDg1MDQ1NDVlZiJd>)