Skip to content

Commit 3b0cf47

Browse files
committed
Add UX report.
1 parent c75fd99 commit 3b0cf47

17 files changed

Lines changed: 1211 additions & 0 deletions

‎docs/ux/ai_default.md‎

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Theme E: AI is now the default route in, through and around PyScript
2+
3+
## What it is
4+
5+
Large language models as the medium of discovery, learning,
6+
construction and documentation for PyScript. This is not a single feature
7+
request; it is a shift in the environment, community and industry in which we
8+
operate.
9+
10+
## What it means for PyScript
11+
12+
AI now sits on almost every path a user takes.
13+
Discovery: Nitau, an engineer, found PyScript because "the LLM told me that
14+
PyScript runs Python in the browser using WebAssembly." Building: Claudiu, a
15+
hobbyist, has moved from writing code to directing it, teaching Claude to use
16+
his PyScript helper functions and stepping back until "I'm never reading the
17+
code, because the code is being produced much faster than I can read it."
18+
Momin, an engineer, has built an entire platform around a copy-paste-from-LLM
19+
workflow for non-technical students. Sai, an informatician, runs an AI agent
20+
that generates Python executed in PyScript, and finds it competitive with a
21+
"billion-dollar company's" full coding-agent setup, partly because "PyScript on
22+
the browser is way faster, I can see what's happening."
23+
24+
There is a clear and important spread of attitudes, which we should represent
25+
faithfully rather than lose under the generic "AI" term. At one end, Claudiu is
26+
comfortable not reading the code. In the middle, Nitau uses "basic prompting"
27+
as "a conscious choice," remaining "the gatekeeper" who reviews everything
28+
before it enters his codebase, and Łukasz treats it as "a productivity
29+
booster, but sometimes it's more like a slot machine." At the other end,
30+
Kattni does not use AI at all, on ethical grounds (training data, climate, and
31+
what she called an "evangelical" culture), and also because her self-assessed
32+
Python knowledge means she "wouldn't be able to tell whether what I was just
33+
given is good or bad." Anna, a learner, deliberately avoids AI for schoolwork
34+
on principle while using it for lab work to move faster.
35+
36+
Two practical sub-findings deserve emphasis. First, model quality against
37+
PyScript changed materially and recently: Łukasz reported that before December
38+
2025, using AI with PyScript was "pretty dangerous," and that with Opus 4.5 it
39+
became "tractable," speculating it may have been trained on the PyScript docs.
40+
Momin noted LLMs "cannot detect the current version of PyScript" and sometimes
41+
add random imports that break the code. Second, and strategically most
42+
important: our documentation increasingly reaches humans only after passing
43+
through an LLM. Nitau observed that he fed the docs' Markdown files to an AI
44+
and "it did a perfect job." Nicholas's own reflection, echoed to several
45+
interviewees, is that the people who read our documentation "are not people,
46+
they're LLMs."
47+
48+
This extends beyond documentation. As AI-native tooling (coding agents such as
49+
Claude Code and GitHub Copilot) becomes the default way practitioners build,
50+
the question is no longer only whether a human can read our docs, but whether
51+
an AI agent can correctly represent our APIs and services when a practitioner
52+
prompts it. How well we express our work to these tools increasingly
53+
determines the quality of response a practitioner receives about PyScript, and
54+
about Anaconda's products more widely. Nicholas has
55+
[written in depth about the challenges this poses](https://ntoll.org/article/predico/).
56+
57+
## Future steps
58+
59+
Treat "how our resources are consumed by LLMs" as a
60+
first-class engineering, education and documentation problem (work Nicholas
61+
has already begun). Ensure the docs, API surface and examples are structured
62+
so an LLM produces correct, version-aware PyScript; the version-detection
63+
failure Momin reported is a concrete target. Keep a genuinely AI-free path
64+
fully supported and first-class, both because some valued community members
65+
(Kattni) require it and because learners (Anna) deliberately choose it. Avoid
66+
taking a single position on AI; the community spans the full range and trust
67+
depends on us respecting and embracing that. Treat how our APIs and services
68+
are represented inside AI-native coding tools as an extension of the
69+
documentation problem: what a coding agent generates about PyScript is now
70+
part of our public interface.
71+
72+
## Standing across archetypes
73+
74+
Universal, but polarised. Engineers and
75+
hobbyists are furthest into AI-assisted building; educators are the most
76+
cautious; learners are thoughtfully selective.
77+
78+
## Challenges
79+
80+
A definitional confusion has dogged discussion of AI and
81+
PyScript inside Anaconda. "AI in the browser" can mean two quite different
82+
things.
83+
84+
1. The first is running LLMs *inside* the browser runtime itself, using
85+
experimental web APIs.
86+
2. The second is what every AI-using practitioner in these interviews actually
87+
does: use LLMs as ordinary and complementary tools (cloud services or
88+
agents) that generate or assist with Python, which then runs in PyScript.
89+
90+
Internal advocacy at Anaconda has focused on the first sense of "AI in the
91+
browser" (running models inside the browser); all the practitioner evidence in
92+
this report concerns the second (LLMs as external tools generating PyScript
93+
code or consuming PyScript-based resources). Acting on this theme therefore
94+
requires realigning internal direction with the evidence, rather than
95+
advocating for something with no demonstrated use case, market signal or
96+
community demand. That realignment is beyond the PyScript team's sole
97+
authority. Furthermore, were in-browser models ever wanted, JavaScript would be
98+
the better-performing tool for the job.

‎docs/ux/appendix1.md‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Appendix 1 - Core Concepts
2+
3+
PyScript's approach rests on three interconnected core concepts that
4+
help us move from the abstract to the concrete (and back again):
5+
6+
## Archetypes
7+
8+
Archetypes are abstract definitions of roles or postures a practitioner may
9+
adopt. We currently use six archetypes:
10+
11+
* Learner - whose primary focus is skill and knowledge acquisition.
12+
* Educator - helps, mentors and creates resources for the learner archetype.
13+
* Engineer - builds valuable things with technology, often in a professional
14+
capacity.
15+
* Informatician - where technology is an important aspect of their job,
16+
while their role is in an orthogonal discipline to coding (for example,
17+
they're a data scientist, meteorologist, developer relations advocate or
18+
medical informatics analyst).
19+
* Administrator - an information worker who uses tech as a secondary
20+
(facilitating) aspect of their job, which focuses on managerial,
21+
bureaucratic or vocational functions. For example, the COO trying to build
22+
a status dashboard or a doctor refining the EHR (electronic health record)
23+
processes in their hospital.
24+
* Hobbyist - is enthusiastic about tech (for tech's sake). They might think
25+
of themselves as a "maker", "geek" or participate in open-source community
26+
activities.
27+
28+
These archetypes help us to think structurally about the different ways people
29+
might approach and use PyScript, without assuming any single practitioner
30+
fits neatly into one category. In reality, we embody multiple archetypes
31+
depending on context or need.
32+
33+
## Personas
34+
35+
Personas are fictional yet carefully constructed embodiments of archetypes.
36+
Each persona has a name, cultural context, background and specific needs.
37+
They exist to help us explore concrete examples of requirements, working
38+
patterns, and contextual motivations. Personas bridge the gap between abstract
39+
thinking about practitioner types and the messy, specific reality of actual
40+
human needs. They help us engage with enlarged empathy and imagination, rather
41+
than through small-minded stereotypes that constrain our thinking. They are
42+
the foil to feature-focused technical work based on "cool" technology and
43+
coding fashions.
44+
45+
Examples of such personas can be
46+
[found in the Invent framework](https://invent-framework.github.io/design/#personas),
47+
(work from 2023).
48+
49+
## Practitioners
50+
51+
Practitioners are real people who may encompass one or more persona
52+
characteristics (like the participants in these interviews). They are the
53+
ultimate source of truth. We validate our assumptions, refine our thinking,
54+
and revise how we define both archetypes and personas based on what
55+
practitioners demonstrate and tell us. Because of PyScript's open-source
56+
foundations, engagement with certain sorts of practitioner happens regularly
57+
through informal community channels. This research aims to formalise, broaden
58+
and deepen that engagement.
59+
60+
This vocabulary originates from work undertaken in 2023 for the Invent
61+
framework (built upon PyScript) and draws upon Nicholas's experience with UX
62+
research at organisations including The Guardian (which had their own
63+
in-house UX "lab") and Marks and Spencer (who make extensive
64+
use of joined-up personas in many teams, from tech and product to marketing
65+
and PR). It reflects the PyScript OSS team's belief in holistic collaboration:
66+
software engineers must work and collaborate with UX and product colleagues,
67+
and not merely implement "features" in isolation or based on guesswork and
68+
tech fashions.

‎docs/ux/appendix2.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Appendix 2 - Theory and Practice
2+
3+
This research was also informed by an internal Anaconda UX framework
4+
organised around segments, personas and scenarios. Because this report will
5+
be read outside Anaconda, we describe how that framework relates to
6+
PyScript's approach without reproducing its confidential detail. Its segments
7+
describe practitioner types as functional roles within organisational
8+
structures, and map closely to PyScript's archetypes ([appendix 1](./appendix1.md)), which
9+
describe postures towards creating with code. Its personas work just as
10+
PyScript's do, giving the two frameworks a shared vocabulary. Its most
11+
valuable addition is scenarios: three descriptions of what practitioners try
12+
to accomplish regardless of role or background - Setting Up (their
13+
environment, tooling and initial access to assets), Building and Development
14+
(creating, testing and iterating on technical work) and Sharing and
15+
Collaboration (distributing outcomes, working with others, managing access).
16+
Every practitioner in this report navigates a variation of all three, and
17+
they are a welcome lens on a practitioner's journey that PyScript's research
18+
will adopt.
19+
20+
Related is the notion of "AI-native" development, a term
21+
[coined by Gartner](https://www.gartner.com/en/articles/top-technology-trends-2026)
22+
to describe systems, products and engineering practices that integrate AI as
23+
a core, foundational component rather than a bolted-on feature. Gartner's
24+
specific forecasts are informed speculation and we treat them as such, but
25+
the term is the current language of our commercial users, and this report
26+
engages with what it names: how practitioners now build with AI-native
27+
tooling, and how well our APIs, services and documentation are represented
28+
inside those tools. [Theme E](./ai_default.md) presents the practitioner evidence for this and
29+
[next step #4](./conclusion.md#4-make-pyscript-an-excellent-citizen-of-the-llm-ecosystem) proposes the response. It is where the open-source practitioner
30+
focus of this report and Anaconda's commercial interests most clearly
31+
converge.

‎docs/ux/case_study.md‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Case study: the Tufts tooling arc (PyScript.com reliability and TuftsHub)
2+
3+
This case study sits slightly apart from the six themes because it is a single,
4+
continuous story told across two calls, and because its subject, Chris and
5+
Ethan at Tufts, is an institutional relationship rather than an individual
6+
archetype. It is included in full because it does three things at once: it
7+
states the PyScript.com reliability problem first-hand, it enumerates exactly
8+
what a replacement must provide, and it demonstrates the engagement loop this
9+
report advocates.
10+
11+
## The problem
12+
13+
Chris and Ethan both praised PyScript.com's ease of
14+
developing, sharing and cloning, and the instant browser-based start it gives
15+
students. The failure is reliability. In Chris's words the service "does with
16+
fair regularity" become "ungodly slow", and when it does so mid-lesson "the
17+
class kind of falls apart", with a middle-school workshop, college classes and
18+
company presentations all named as failures. Because PyScript.com is
19+
unmaintained, the fix path runs through colleagues and infrastructure and
20+
takes fifteen minutes to half an hour, which is no use in front of a class.
21+
This is the first-hand version of the crashes Anna and Hammad reported
22+
second-hand.
23+
24+
## What a replacement must provide
25+
26+
The professors were willing to move
27+
hosting to GitHub Pages, which they value for teaching industry-standard Git
28+
workflows, but only three PyScript.com capabilities stand in the way: channels
29+
(sharing information between pages over WebSockets), an API proxy (so a secret
30+
key is never exposed), and authorisation (so a project is restricted to
31+
approved people, since an open project is, as Ethan noted, "attached to my
32+
credit card"). A useful clarification emerged on channels: they already run on
33+
the same publish/subscribe logic as the industry-standard MQTT message bus,
34+
with PyScript.com acting as the broker, and Chris confirmed they have
35+
connected Raspberry Pis and ESP32s to the PyScript WebSocket. The desired
36+
solution was a one-click, pip-installable tool that "just sits there happily
37+
humming away in the corner like a fridge", local-first and offline-capable
38+
(Ethan's "aeroplane version"), syncing to a GitHub folder, and self-hostable
39+
on Tufts, Amazon or any other infrastructure. Nicholas noted this effectively
40+
amounts to a white-label "PyScript.com enterprise" instance, a useful data
41+
point and potential opportunity for Anaconda.
42+
43+
## The response and its review
44+
45+
Nicholas built TuftsHub (thub) against these
46+
requirements, and the second call reviewed it. Chris demonstrated it serving an
47+
app locally straight from the source he was editing, with user management built
48+
in. Feedback and new requests followed: a one-action pull of an existing
49+
PyScript.com project (reading the `pyscript.toml` and assembling a complete
50+
offline copy), support for running several projects at once, and a
51+
single-window view combining files, code and live preview to escape the sprawl
52+
of many editor and browser windows. Nicholas was careful throughout not to
53+
reinvent PyScript.com's in-browser IDE, preferring to open the design question
54+
to colleagues Martin and Josh and the wider community, and floated his earlier
55+
PySnippets work as a possible starting point.
56+
57+
## Why it matters
58+
59+
Beyond the concrete requirements, the arc is the report's
60+
clearest example of engagement done effectively: requirements gathered on the
61+
record so the movement from problem to solution is visible, a proof of concept
62+
built quickly, a review to refine it, and then a deliberate opening-up, keeping
63+
the repository under the Tufts GitHub organisation, seeking a better name than
64+
thub, releasing on PyPI, and shifting future requests from private Slack to
65+
public GitHub issues. It is both a source of requirements (Themes
66+
[A](./friction_free.md), [B](./js_boundary.md), [D](./onboarding_path.md)) and
67+
a template for how this kind of work should run ([Theme F](./visibility.md)).

0 commit comments

Comments
 (0)