Training Example: Pinia – Review the Data, Give Your Score & Compare to the Real AI Evaluation

Industry Context — Common BS Fingerprints in Software, SaaS & Tech Products
Generic Claims: the all-in-one platform, trusted by thousands of companies, increase productivity by X percent, save hours every week…
Red Flags: AI claims without explaining what the AI does, customer logos without case study or testimonial evidence, no live product access or demo, SOC 2 claims without audit period or report availability…
Semantic Drift Patterns: homepage claims AI-powered but product is rules-based, claims enterprise-grade but pricing page shows startup tiers only, homepage shows Fortune 500 logos but case studies are small businesses, claims all-in-one but integration page shows critical missing pieces…
Proof Expectations: live product demo or free trial access, specific feature documentation with screenshots, verified customer logos with published case studies, third-party review scores on G2, Capterra, or TrustRadius…

Pinia

(https://pinia.vuejs.org) 📸 Data Snapshot: May 24, 2026

Analyze the raw signals below. How would a machine score this business’s credibility?

Here are the exact signals captured from up to six pages of the site — the same raw inputs the evaluation engine analyzed. They are grouped by signal type so you can weigh each the way the machine does.

🏗️ Semantic Structure — heading hierarchy & page identity (Info Density · Commodity Fingerprint)
HOMEPAGE Pinia | The intuitive store for Vue.js (https://pinia.vuejs.org)
Title

Pinia | The intuitive store for Vue.js

Meta

Intuitive, type safe, light and flexible Store for Vue

H1 PiniaThe intuitive store for Vue.js
H2 ? Intuitive
H2 ? Type Safe
H2 ⚙️ Devtools support
H2 ? Extensible
H2 ? Modular by design
H2 ? Extremely light
H3 Gold Sponsors
H3 Silver Sponsors
NAV_HEADER_REPEATED Pinia | The intuitive store for Vue.js (https://pinia.vuejs.org/zh/)
Title

Pinia | The intuitive store for Vue.js

Meta

值得你喜欢的 Vue Store

H1 Pinia符合直觉的 Vue.js 状态管理库
H2 ? 所见即所得
H2 ? 类型安全
H2 ⚙️ 开发工具支持
H2 ? 可扩展性
H2 ? 模块化设计
H2 ? 极致轻量化
H3 Gold Sponsors
H3 Silver Sponsors
HEADING_BODY Introduction | Pinia (https://pinia.vuejs.org/introduction.html)
Title

Introduction | Pinia

Meta

Intuitive, type safe, light and flexible Store for Vue

H1 Introduction ​
H2 Introduction
H2 Core Concepts
H2 Server-Side Rendering (SSR)
H2 Cookbook
H2 Why should I use Pinia? ​
H2 Basic example ​
H2 Official Course ​
H2 Why Pinia ​
H2 A more realistic example ​
H2 Comparison with Vuex ​
H3 RFCs ​
H3 Comparison with Vuex 3.x/4.x ​
H4 CodeRabbit
H4 Become a sponsor
H4 VueMastery
H4 Controla
H4 Route Optimizer and Route Planner Software
H4 SendCloud
NAV_HEADER Defining a Store | Pinia (https://pinia.vuejs.org/core-concepts/)
Title

Defining a Store | Pinia

Meta

Intuitive, type safe, light and flexible Store for Vue

H1 Defining a Store ​
H2 Introduction
H2 Core Concepts
H2 Server-Side Rendering (SSR)
H2 Cookbook
H2 Option Stores ​
H2 Setup Stores ​
H2 What syntax should I pick? ​
H2 Using the store ​
H2 Destructuring from a Store ​
H4 CodeRabbit
H4 Become a sponsor
H4 VueMastery
H4 Controla
H4 Route Optimizer and Route Planner Software
H4 SendCloud
📝 The Narrative — clean text per page (Info Density · Semantic Coherence)
HOMEPAGE (https://pinia.vuejs.org) Pinia | The intuitive store for Vue.js
Skip to content
[H1] PiniaThe intuitive store for Vue.js
Type Safe, Extensible, and Modular by design. Forget you are even using a store.Get StartedDemoRuleKit Watch Video IntroductionGet the Pinia Cheat Sheet
[H2] ? Intuitive
Stores are as familiar as components. API designed to let you write well organized stores.
[H2] ? Type Safe
Types are inferred, which means stores provide you with autocompletion even in JavaScript!
[H2] ⚙️ Devtools support
Pinia hooks into Vue devtools to give you an enhanced development experience.
[H2] ? Extensible
React to store changes and actions to extend Pinia with transactions, local storage synchronization, etc.
[H2] ? Modular by design
Build multiple stores and let your bundler code split them automatically.
[H2] ? Extremely light
Pinia weighs ~1.5kb, you will forget it's even there!
[H3] Gold Sponsors
[IMG: CodeRabbit]
[H3] Silver Sponsors
[IMG: VueMastery]
[IMG: Controla]
[IMG: Route Optimizer and Route Planner Software]
[IMG: SendCloud]
Become a Sponsor!
1005 chars
SUB-PAGE · THIN (https://pinia.vuejs.org/zh/) Pinia | The intuitive store for Vue.js
Skip to content
[H1] Pinia符合直觉的
Vue.js 状态管理库
类型安全、可扩展性以及模块化设计。
甚至让你忘记正在使用的是一个状态库。开始使用Demo 演示RuleKit 观看视频介绍获取 Pinia 速查表
[H2] ? 所见即所得
与组件类似的 Store。其 API 的设计旨在让你编写出更易组织的 store。
[H2] ? 类型安全
类型可自动推断,即使在 JavaScript 中亦可为你提供自动补全功能!
[H2] ⚙️ 开发工具支持
不管是 Vue 2 还是 Vue 3,支持 Vue devtools 钩子的 Pinia 都能给你更好的开发体验。
[H2] ? 可扩展性
可通过事务、同步本地存储等方式扩展 Pinia,以响应 store 的变更以及 action。
[H2] ? 模块化设计
可构建多个 Store 并允许你的打包工具自动拆分它们。
[H2] ? 极致轻量化
Pinia 大小只有 1kb 左右,你甚至可能忘记它的存在!
[H3] Gold Sponsors
[IMG: CodeRabbit]
[H3] Silver Sponsors
[IMG: VueMastery]
[IMG: Controla]
[IMG: Route Optimizer and Route Planner Software]
[IMG: SendCloud]
成为赞助者!
609 chars
SUB-PAGE (https://pinia.vuejs.org/introduction.html) Introduction | Pinia
[H1] Introduction ​
Master this and much more with a free video from Mastering PiniaPinia started as an experiment to redesign what a Store for Vue could look like with the Composition API around November 2019. Since then, the initial principles have remained the same and Vue 2 support has been dropped in 2025, but Pinia doesn't require you to use the composition API.
[H2] Why should I use Pinia? ​
Pinia is a store library for Vue, it allows you to share a state across components/pages. If you are familiar with the Composition API, you might be thinking you can already share a global state with a simple export const state = reactive({}). This is true for single page applications but exposes your application to security vulnerabilities if it is server side rendered. But even in small single page applications, you get a lot from using Pinia:Testing utilitiesPlugins: extend Pinia features with pluginsProper TypeScript support or autocompletion for JS usersServer Side Rendering supportDevtools support A timeline to track actions and mutationsStores appear in components where they are usedTime travel and easier debuggingHot module replacement Modify your stores without reloading your pageKeep any existing state while developingIf you still have doubts, check out the official Mastering Pinia course. In the beginning we cover how to build our own defineStore() function and then we move to the official Pinia API.✨Vibe code Vue apps with confidenceRuleKit
[IMG: Vue Mastery Logo]
Get the Pinia Cheat Sheet from Vue Mastery
[H2] Basic example ​
This is what using Pinia looks like in terms of API (make sure to check the Getting Started for complete instructions). You start by creating a store:js// stores/counter.js
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => {
return { count: 0 }
},
// could also be defined as
// state: () => ({ count: 0 })
actions: {
increment() {
this.count++
},
},
})And then you use it in a component:vue<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
counter.count++
// with autocompletion ✨
counter.$patch({ count: counter.count + 1 })
// or using an action instead
counter.increment()
</script>
<template>
<!-- Access the state directly from the store -->
<div>Current Count: {{ counter.count }}</div>
</template>Try it in the PlaygroundYou can even use a
2473 chars
SUB-PAGE (https://pinia.vuejs.org/core-concepts/) Defining a Store | Pinia
[H1] Defining a Store ​
Master this and much more with a free video from Mastering PiniaBefore diving into core concepts, we need to know that a store is defined using defineStore() and that it requires a unique name, passed as the first argument:jsimport { defineStore } from 'pinia'
// You can name the return value of `defineStore()` anything you want,
// but it's best to use the name of the store and surround it with `use`
// and `Store` (e.g. `useUserStore`, `useCartStore`, `useProductStore`)
// the first argument is a unique id of the store across your application
export const useAlertsStore = defineStore('alerts', {
// other options...
})This name, also referred to as id, is necessary and is used by Pinia to connect the store to the devtools. Naming the returned function use... is a convention across composables to make its usage idiomatic.defineStore() accepts two distinct values for its second argument: a Setup function or an Options object.✨Vibe code Vue apps with confidenceRuleKit
[H2] Option Stores ​
Similar to Vue's Options API, we can also pass an Options Object with state, actions, and getters properties.jsexport const useCounterStore = defineStore('counter', {
state: () => ({ count: 0, name: 'Eduardo' }),
getters: {
doubleCount: (state) => state.count * 2,
},
actions: {
increment() {
this.count++
},
},
})You can think of state as the data of the store, getters as the computed properties of the store, and actions as the methods.Option stores should feel intuitive and simple to get started with.
[H2] Setup Stores ​
There is also another possible syntax to define stores. Similar to the Vue Composition API's setup function, we can pass in a function that defines reactive properties and methods and returns an object with the properties and methods we want to expose.jsexport const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const name = ref('Eduardo')
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
return { count, name, doubleCount, increment }
})In Setup Stores:ref()s become state propertiescomputed()s become gettersfunction()s become actionsNote that you must return all state properties in setup stores for Pinia to pick them up as state. In other words, you cannot have private state properties in stores. Not returning all state properties or making them readonly will break SSR, devtools, and other plugins.Setup stores bring a lot more flexibility than Option Stores as you can create watchers within a store and freely use any composable. However, keep in mind that using composables will get more complex when using SSR.Setup stores are also able to rely on globally provided properties like the Router or the Route. Any property provided at the App level can be accessed from the store using inject(), just like in components:tsimport { inject } from 'vue'
import { useRoute } from 'vue-router'
import { defineStore } from 'pinia'
export const useSearchFilters = defineStore('search-filters', () => {
const route = useRoute()
// this assumes `app.provide('appProvided', 'value')` was called
const appProvided = inject('appProvided')
// ...
return {
// ...
}
})WARNINGDo not return properties like route or appProvided (from the example above) as they do not belong to the store itself and you can directly access them within components with useRoute() and inject('appProvided').
[H2] What syntax should I pick? ​
As with Vue's Composition API and Options API, pick the one that you feel the most comfortable with. Both have their strengths and weaknesses. Options stores are easier to work with while Setup stores are more flexible and powerful. If you want to dive deeper into the differences, check the Option Stores vs Setup Stores chapter in Mastering Pinia.
[H2] Using the store ​
We are defining a store because the store won't be created until use...Store() is called within a component <script setup> (or within setup() like all composables):vue<script setup>
import { useCounterStore } from '@/stores/counter'
// access the `store` variable anywhere in the component ✨
const store = useCounterStore()
</script>TIPIf you are not using setup components yet, you can still use Pinia with map helpers.You can define as many stores as you want and you should define each store in a different file to get the most out of Pinia (like automatically allowing your bundler to code split and providing TypeScript inference).Once the store is instantiated, you can access any property defined in state, getters, and actions directly on the store. We will look at these in detail in the next pages but autocompletion will help you.Note that store is an object wrapped with reactive, meaning there is no need to write .value after getters but, like props in setup, we cannot destructure it:vue<script setup>
import { useCounterStore } from '@/stores/counter'
import { computed } from 'vue'
const store = useCounterStore()
// ❌ This won't work because it breaks reactivity
// same as reactive: https://vuejs.org/guide/essentials/reactivity-fundamentals.html#limitations-of-reactive
const { name, doubleCount } = store
name // will always be "Eduardo"
doubleCount // will always be 0
setTimeout(() => {
store.increment()
}, 1000)
// ✅ this one will be reactive
// ? but you could also just use `store.doubleCount` directly
const doubleValue = computed(() => store.doubleCount)
</script>
[H2] Destructuring from a Store ​
In order to extract properties from the store while keeping its reactivity, you need to use storeToRefs(). It will create refs for every reactive property. This is useful when you are only using state from the store but not calling any action. Note you can destructure actions directly from the store as they are bound to the store itself too:vue<script setup>
import { useCounterStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'
const store = useCounterStore()
// `name` and `doubleCount` are reactive refs
// This will also extract refs for properties added by plugins
// but skip any action or non reactive (non ref/reactive) property
const { name, doubleCount } = storeToRefs(store)
// the increment action can just be destructured
const { increment } = store
</script>
6316 chars
🛡️ Trust Signals — reviews, proof links, trust-theatre flag (Trust & Proof)
1Review mentions (all pages)
0External proof links (all pages)
PageReviewsProof links
/ (home) 0 0
/zh/ 0 0
/introduction.html 1 0
/core-concepts/ 0 0
🔗 Identity & Technical Layer — schema JSON-LD: identity chains, entity gaps (Identity & Authority)
Homepage — no schema detected (entity gap)
/zh/ — no schema detected (entity gap)
/introduction.html — no schema detected (entity gap)
/core-concepts/ — no schema detected (entity gap)

Your Diagnosis

Before revealing the machine’s verdict, predict the BS score for each signal. Higher = more BS (more fluff, less verifiable substance). Drag each slider, then submit to compare your judgment against the engine.

Information Density 0 / 30
Read the Narrative & headings: do hard facts (prices, dates, numbers) outweigh fluff power-words?
Semantic Coherence 0 / 20
Compare the homepage promise against the sub-page reality. Do they hold the same line?
Trust & Proof 0 / 20
Weigh review mentions against actual external proof links. Claims without verification = theatre.
Commodity Fingerprint 0 / 15
Check headings & narrative against the industry clichés in the setup above.
Identity & Authority 0 / 15
Inspect the schema: is there real Organization/Person identity with sameAs links, or gaps?
Your predicted BS score 0 / 100
💡 Stuck? Reveal the heuristic lens — how the deterministic page-auditor reads each signal (no AI, pure pattern rules)

These are the structural rules a local, deterministic auditor applies — the same lens you can use to judge each signal. They describe what to look for, not this company’s result.

Information Density

Classify each sentence as substantive or hollow. Grounding markers — numbers, currencies, dates, technical units, named entities — outweigh marketing adjectives. When fluff sits right next to hard evidence, the fluff is forgiven.

Semantic Alignment

Pull the main entities out of the H1, then check whether they actually recur through the body. A page that announces one thing and then talks about another drifts. Headings with no real sentences underneath read as pseudo-substance.

Trust & Proof

Count trust words (review, testimonial, rating, verified) against real outbound proof links (Google, Trustpilot, Clutch, G2, Yelp). Lots of trust language with zero verification links is trust theatre. Unlinked logo galleries count against it.

Commodity Fingerprint

Look at how much sentence length varies. Natural writing varies its rhythm; templated or mass-produced copy is statistically uniform. Very low variation reads as commodity content — unless unique named entities break the pattern.

Identity & Authority

Inspect the JSON-LD. Is there an Organization or Person schema, and does it carry sameAs links to real external profiles (LinkedIn, socials)? Missing schema or no identity declaration signals an anonymous entity.

Want to apply this lens yourself? The free BS Indicator Chrome extension runs these heuristic checks live on any page. Bear in mind it is a single-page, deterministic tool — it relies only on pattern rules for the page in front of it and does not perform the cross-page semantic correlation this audit uses, so its readout is a starting lens, not the full verdict.

B
BS Level
Software, SaaS & Tech Products
33.2 Avg BS

Based on 1130 businesses audited.

BS Detector

Software, SaaS & Tech Products BS: Pinia (pinia.vuejs.org)

https://pinia.vuejs.org 📍 Industry: Software, SaaS & Tech Products
12 BS / 100

Pinia is a masterclass in substance-led tech documentation. It replaces marketing fluff with functional utility, proving its value through code rather than adjectives. The low BS score reflects a rare alignment between what the tool says it does and what it shows the user how to do.

Info Density Power-words vs. Substance ratio.
4
13% BS
Semantic Coherence Homepage promise vs. Sub-page reality.
0
0% BS
Trust & Proof Verifiable evidence vs. Trust Theatre.
3
15% BS
Commodity Fingerprint Detection of industry clichés/templates.
1
7% BS
Identity & Authority Expert verifiability & Schema depth.
4
27% BS

To achieve a near-zero BS score, implement Organization and Person schema to formally link the brand to its creators and official maintainers. Add outbound proof links to the npm registry or a bundle-size analyzer to verify the 1.5kb claim externally. Resolve the trust_theatre_flag by linking the ‘Mastering Pinia’ reviews to a third-party verified platform. Ensure the Chinese sub-page (zh) is fully populated to match the English site’s information density.

The site perfectly matches the Software and Tech industry, specifically as an open-source developer tool for the Vue.js ecosystem. The content is technical, focusing on state management, API design, and developer experience.

“The score of 12 is primarily driven by the absence of structured data (Identity) and minor technical flags for trust theatre where reviews lack outbound verification paths. Information density and semantic coherence are nearly perfect, effectively neutralizing most generic industry cliché penalties. The site is a benchmark for high-substance technical communication.”

Verified Analysis Date: May 24, 2026 © 1EuroSEO Independent Evaluator — Non-Sponsored Result
Brand AI Reputation